VS2013 + OpenCvSharp 图片中的红圈里面的东西是怎么添加进来的?谢谢
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VS2013 + OpenCvSharp 图片中的红圈里面的东西是怎么添加进来的?谢谢相关的知识,希望对你有一定的参考价值。
参考技术A 1)把需要的opencv的dll放到exe生成的文件夹下,....bin\x86\Debug此例只需要opencv_core231.dll和opencv_imgproc231.dll, 如果不知道需要哪个dll就把opencv文件夹中bin下面的dll都拷贝过来。
2)OpenCvSharp.dll确保已经在这个debug文件夹中
3)从opencv文件夹中的 .....\build\common\tbb\ia32\vc10 把tbb的一系列.dll复制过来到这个debug文件夹中
因为opencv_core.dll需要依赖tbb.dll 否则会出现DllNotFoundException
4)本例中,需要一个名为“lenna”的png图片
6. 若出现msvcr100d.dll is missing 的错误
参考http://tech.dir.groups.yahoo.com/group/OpenCV/message/78648
下载上面链接中的文件,放到opencv的bin目录下。
After you extract MSVCR100D_MSVCP100D.rar file,
you must copy MSVCP100D.dll and msvcr100d.dll to C:\OpenCV2.2\bin
then you will never found MSVCP100D.dll and msvcr100d.dll is missing.
OpenCvSharp用掩膜来实现圆形的ROI区域
首先我有一个问题:opencv有没有一个类似于Rect的这么一个圆的框架,就像下面这段代码能直接从原图上裁剪下来一个圆形的ROI(ROI图片是一个圆),而不是像本文介绍的这样用掩膜遮掉不感兴趣区域(ROI图片大小和原图一样)?有知道的大牛评论分享一下,欢迎讨论
Rect tmp_Rect = new Rect(Math.Min(X0, X1), Math.Min(Y0, Y1), Math.Abs(X0 - X1), Math.Abs(Y0 - Y1));
roiImg = new Mat(srcImg, tmp_Rect);
好了,那么言归正传:(完整代码我就不贴出了,步骤很简单,很清晰)
步骤:读图 ⋙ 画ROI/霍夫变换识别圆 ⋙ 创建一个掩膜并将圆按原位置画在掩膜上 ⋙ 对掩膜水漫填充 ⋙ 生成原图与掩膜结合的图片
①你可以利用霍夫变换识别图中的圆形区域CircleSegment[] cs = Cv2.HoughCircles(roiClone, HoughMethods.Gradient, 1, 80, 70, 100, 100, 200);
或者你利用Cv2.Circle(……)手动画一个圆形区域,将圆形的中点Point seed记录下来(这个点水漫填充时会用到,即水漫填充算法的起始点)
②接着就是创建掩膜,所谓的掩膜说白了:就是创建一个和原图大小一致的这么一个空容器Mat mask = Mat.Zeros(OrgMatClone.Size(), MatType.CV_8U);
③然后,再利用水漫填充将感兴趣区域填充起来 Cv2.FloodFill(mask, seed, new Scalar(255));
④最后,srcImg.CopyTo(resMat, mask); 注:srcImg是原图片,resMat是原图与掩膜结合之后的结果图
“其他形状的ROI也是同样的道理,思路也是这样的思路就是第一步不同”
画任意形状的ROI你可以参考这篇博客☚我是超级链接哦
最后:效果图如下
当然,还没结束
我们可以利用Cv2.FindContours(……)来这样处理:
你有没有发现这个算子的第三个参数是啥,所以就可以这样:
就得到这样的效果:(左:原图 、右上:处理后的圆形ROI、右下:原矩形ROI)
以上是关于VS2013 + OpenCvSharp 图片中的红圈里面的东西是怎么添加进来的?谢谢的主要内容,如果未能解决你的问题,请参考以下文章