EmguCV中CvInvoke.cvFindContours和CvInvoke.cvMinAreaRect2有一些图片无法找出最小包围矩阵

澄澈秋水丶 2016-09-22 10:24:14

这一张图片能够给很准确的识别并画出最小包围矩阵

这一张的识别就有问题(和图片角度无关,第一张找出最小包围矩阵后做过旋转变换)

这是两张图片的二值化结果,可以看出识别不出的原因和二值化后内部黑色像素有关,有没有大神指导一下这个问题怎么解决!
...全文
915 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
good_jobs 2016-09-30
  • 打赏
  • 举报
回复
emgu 大津阈值自动二值化,可以试一试
澄澈秋水丶 2016-09-22
  • 打赏
  • 举报
回复
下面是我的实现的主要代码

            IntPtr Dyncontour = new IntPtr();//存放检测到的图像块的首地址
            IntPtr Dynstorage = CvInvoke.cvCreateMemStorage(0);
            int n = CvInvoke.cvFindContours(b, Dynstorage, ref Dyncontour, StructSize.MCvContour
                , Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN             _APPROX_SIMPLE, new Point(0, 0));
             MCvBox2D rect;
                rect = CvInvoke.cvMinAreaRect2(Dyncontour, Dynstorage);
                PointF[] rect_p = new PointF[4];
                CvInvoke.cvBoxPoints(rect, rect_p);
                Point[] pt = new Point[4];
                for (int i = 0; i < 4; i++)
                {
                    pt[i].X = (int)rect_p[i].X;
                    pt[i].Y = (int)rect_p[i].Y;
                }
                CvInvoke.cvLine(a, pt[0], pt[1], new MCvScalar(255, 255, 255), 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
                CvInvoke.cvLine(a, pt[1], pt[2], new MCvScalar(255, 255, 255), 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
                CvInvoke.cvLine(a, pt[2], pt[3], new MCvScalar(255, 255, 255), 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
                CvInvoke.cvLine(a, pt[3], pt[0], new MCvScalar(255, 255, 255), 2, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
澄澈秋水丶 2016-09-22
  • 打赏
  • 举报
回复
来个人啊啊啊啊啊啊啊啊啊啊~~~~~~

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧