[blog 项目实战派]钢管识别项目2

钢管识别项目2

零、相关说明:

首先进行一下相关说明。在“jsxyhelu.cnblogs.com/项目实战派”栏目里面出现的需求、图片和其他资源,都是我在浏览威客网站、论坛等网站的时候通过正规渠道获得的真实需求。个人觉得比较感兴趣,但是由于时间或者工作的冲突自己没有去接这些项目。但是由于这些需求都很有实现价值,所以过了一段时间,仍然拿出来练一练手,并且实现了核心模块。希望能够给浏览者一些启发。如果你认为这些图片和资源放在这里不合适,请及时联系我([email protected]),我会及时处理的。此外,我会将核心代码和技术细节尽可能将清楚,我认为这样才是最有价值的方式。如果需要原始代码,也可以和我联系。

一、需求

将“钢管识别项目1”中识别出来的结果导入Csharp的GUI中,通过手工辅助操作,对识别的结果进行修正。

二、初步分析

现在已经实现了图像处理的相关算法,能够自动处理图像得到上图的结果,那么下面需要做的就是

2.1)传递结果到Csharp中去;

采用的方法是比较熟悉的"csharp调用dll文件"方法。麻烦之处在于这里的结果数量比较大,而且其大小不固定。所以我尝试采用了“外文件参数”的方法。

修改相关的代码,使得能够将所有圆的坐标打印出来

//寻找被填充的部分

threshold(gray,thresh,240,250,THRESH_OTSU);
    erode(thresh,thresh,Mat());
    erode(thresh,thresh,Mat());
    contours.clear();
    selectContours.clear();
    findContours(thresh.clone(),contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE);
    for (int i=0;i<contours.size();i++)
    {
        if ( contourArea(contours[i])>188 && contourArea(contours[i])<388 )
        {    
            //drawContours(srcClone,contours,i,Scalar(0,0,255));
            selectContours.push_back(contours[i]);//将经过筛选的轮廓保存起来
        }
    }
    for (int i=0;i<selectContours.size();i++)
    {
        Point2f center;
        float   radius;
        minEnclosingCircle(selectContours[i],center,radius);
        if (radius > 10*0.8 && radius < 10*1.4)
        {  
            if (ellipseLikeCircle(minEllipse[i]))
            {     
                circle(src,center,radius,Scalar(0,0,255));
                //ellipse(  src,minEllipse[i],Scalar(255,0,0));
                pair<Point2f,float> tmp;
                tmp.first = center;
                tmp.second = radius;
                resultPair.push_back(tmp);
            }
        }
    }
    //打印结果
    fstream ftxt;
    ftxt.open("c:/GO_FindTube_Param.ini",ios::out); //写入的方式,覆盖写入
    if(ftxt.fail())
    {
        cout<<"can not open it"<<endl;     
        getchar();     
        return 0; 
    }
   
    for (int i=0;i<resultPair.size();i++)
    {
        pair<Point2f,float> tmp = resultPair[i];
        ftxt<<tmp.first.x<<" "<<tmp.first.y<<" "<<tmp.second<<endl;
    }
    ftxt.close();



 432.967 294.45 11.3052

461 290 10.949

571 288.5 11.3417

517.214 286.643 9.90404

88.7667 286.767 11.4066

627 287 11.5157

599.571 287.714 11.1538

537.269 284.86 12.7203

487.5 287 11.3417

395 285.5 10.617

257.093 288.093 11.6269

145.085 286.573 10.5136

311 286 11.7438

……

导入并且画圆,结果看起来还不错。里面的误差来自于数值转化的时候的误差,在本例中不是大问题。

  2.2)坐标统一化操作

本例的图片显示和上面的圆的计算,都是和实际图片相一致的。实际运用中可能会出现在显示的时候需要进行图片缩放的情况,这个时候,需要计算出缩放的比率,并且在最后画圆的时候有所考虑。

2.3)编写合适的界面处理代码,使得交互工作能够运行和达到效果。

能够选中某一个圆,并且删除一个圆

能够创建一个圆

三、结果(看视频)

小结:目前这种方法应该说是能够解决一定问题的。而且由于目前使用winform通过dll调用opencv的方法也比较熟悉了,使用起来比较顺手。

解决目前这个需求应该是问题不大了,更多的问题可能需要晕倒真实项目的时候来解决吧。

来自为知笔记(Wiz)

时间: 2024-11-08 18:13:49

[blog 项目实战派]钢管识别项目2的相关文章

[blog 项目实战派]钢管识别项目1

钢管识别项目1 零.相关说明: 首先进行一下相关说明.在"jsxyhelu.cnblogs.com/项目实战派"栏目里面出现的需求.图片和其他资源,都是我在浏览威客网站.论坛等网站的时候通过正规渠道获得的真实需求.个人觉得比较感兴趣,但是由于时间或者工作的冲突自己没有去接这些项目.但是由于这些需求都很有实现价值,所以过了一段时间,仍然拿出来练一练手,并且实现了核心模块.希望能够给浏览者一些启发.如果你认为这些图片和资源放在这里不合适,请及时联系我([email protected]),

【项目实战派】图像处理项目硬件选型

[项目实战派]图像处理项目的硬件平台选型 一直以来我都对嵌入式系统比较感兴趣,因为感到图像处理最终还是要走向便携式.移动化的.这里讲自己对图像处理项目的硬件平台选型这块的想法进行交流,欢迎交流.批评. 一.典型图像处理系统构建 ①相机与镜头--这部分属于成像器件,通常的视觉系统都是由一套或者多套这样的成像系统组成,如果有多路相机,可能由图像卡切换来获取图像数据,也可能由同步控制同时获取多相机通道的数据.根据应用的需要相机可能是输出标准的单色视频(RS-170/CCIR).复合信号(Y/C).RG

[blog 项目实战派]压板识别项目分析

压板识别项目 零.相关说明: 首先进行一下相关说明.在"jsxyhelu.cnblogs.com/项目实战派"栏目里面出现的需求.图片和其他资源,都是我在浏览威客网站.论坛等网站的时候通过正规渠道获得的真实需求.个人觉得比较感兴趣,但是由于时间或者工作的冲突自己没有去接这些项目.但是由于这些需求都很有实现价值,所以过了一段时间,仍然拿出来练一练手,并且实现了核心模块.希望能够给浏览者一些启发.如果你认为这些图片和资源放在这里不合适,请及时联系我([email protected]),我

[blog 项目实战派]csharp通过dll调用opencv函数

[blog 项目实战派]opencv通过dll调用matlab函数,图片作为参数 前文介绍了如何“csharp通过dll调用opencv函数,图片作为参数”.而在实际的代码编写过程中,很多时候想把已经写好的matlab函数融合进去,但是依然是将图片作为参数传递比较成为问题.这里我经过一段时间的研究解决了这个问题(目前只解决了灰度图片下的图片传递问题).这个问题包含几个难点,一个是mxmatrix的使用,一个是matlab和opencv对于图片的格式处理是不一样的. 本次这个项目,是opencv通

【项目实战派】触摸屏程序设计要点

[项目实战派]触摸屏程序设计要点            触摸屏作为一种更为直接的人机交互方式,现在广泛运用于智能手机.工业控制.场景展示等许多场合.作为程序员,如何理解触摸屏程序设计?如何做好的触摸屏程序设计?现在已经有的资源包括那些?借着项目牵引,我对这个问题进行一定探索,经验有限,欢迎批评交流. 一.如何理解触摸屏程序设计 操作系统层面已经实现了基础功能,基于触摸屏的界面,从本质上来说和普通的GuI界面是没有区别的.程序的界面设计需要服务于程序的功能,为客户提供直观.易用.体验效果较好的界面

[blog 项目实战派]csharp通过dll调用opencv函数,图片作为参数

?一直想做着方面的研究,但是因为这个方面的知识过于小众,也是由于自己找资料的能力比较弱,知道今天才找到了比较好的资料.一个是thinimage,一个是basework,里面都实现了这里的“csharp通过dll调用opencv函数,并且采用图片作为参数”.这里小结如下. 关于如何“csharp通过dll调用opencv函数”,请参考前面博文,这里主要说如何“采用图片为参数”. 在编写图像识别/增强/机器视觉等项目的时候,一般会将算法打包成dll文件给客户,如果界面是用mfc写的话,是很好实现这个

机器学习进阶-项目实战-信用卡数字识别 1.cv2.findContour(找出轮廓) 2.cv2.boudingRect(轮廓外接矩阵位置) 3.cv2.threshold(图片二值化操作) 4.cv2.MORPH_TOPHAT(礼帽运算突出线条) 5.cv2.MORPH_CLOSE(闭运算图片内部膨胀) 6. cv2.resize(改变图像大小) 7.cv2.putText(在图片上放上文本)

7. cv2.putText(img, text, loc, text_font, font_scale, color, linestick) # 参数说明:img表示输入图片,text表示需要填写的文本str格式,loc表示文本在图中的位置,font_size可以使用cv2.FONT_HERSHEY_SIMPLEX, font_scale表示文本的规格,color表示文本颜色,linestick表示线条大小 信用卡数字识别: 信用卡      数字模板涉及到的内容:主要是采用模板匹配的思想 思

[项目实战派]花40分钟写一个-CBIR引擎-代码公开

浏览网页的时候发现一篇不错的文章"用Python和OpenCV创建一个图片搜索引擎的完整指南"http://python.jobbole.com/80860/.作者在浏览自己旅游的照片的时候,发现照片太多了分类不过来,一时技痒写了个分类软件,虽然简单但是有用.关键的是我发现他在原文中使用了半个小时就写出来了. 蛮快的嘛,我想.那么我要用多长时间写出来了,毕竟对于CBIR也是研究过的. 那么立即来做,首先我要找到是图片.我没有那么多旅游图片(汗),但是别人的照片也是可以一样用的.找到了之

从零开始Vue项目实战(三)-项目结构

现在在浏览器中输入http://localhost:8083,可以看到初始的"Welcome to Your Vue.js App"页面了 目录结构 ├── README.md 项目介绍 ├── index.html 入口页面 ├── build 构建脚本目录 │ ├── build-server.js 运行本地构建服务器,可以访问构建后的页面 │ ├── build.js 生产环境构建脚本 │ ├── dev-client.js 开发服务器热重载脚本,主要用来实现开发阶段的页面自动刷