|
本帖最后由 flymoon87 于 2018-9-25 19:59 编辑
我用C# + EMGU3.4.1版本,重写了《OpenCV3编程入门》中7.2.5的示例程序,该程序演示了累计概率霍夫变换:HoughLinesP()函数的使用,程序代码如下:- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Drawing;
- using Emgu.CV;
- using Emgu.CV.CvEnum;
- using Emgu.CV.Util; //用于定义vector的cv命名空间
- using Emgu.CV.Structure;
- namespace HoughLines
- {
- class Program
- {
- static void Main(string[] args)
- {
- //载入原始图
- Mat srcImage = CvInvoke.Imread("Building3.jpg");
- //临时变量和目标图的定义
- Mat tempImage = new Mat(), dstImage = new Mat();
- //进行Canny边缘检测
- CvInvoke.Canny(srcImage, tempImage, 50, 200, 3);
- //灰度转换,此处dstImage之所以要转换成color形式,是为了后面绘制line时,可以使用彩色line
- CvInvoke.CvtColor(tempImage, dstImage, ColorConversion.Gray2Bgr);
- //进行霍夫线变换
- VectorOfVectorOfInt lines = new VectorOfVectorOfInt();
- //VectorOfVectorOfPoint lines = new VectorOfVectorOfPoint();
- CvInvoke.HoughLinesP(tempImage, lines, 1, Math.PI / 180, 80, 50, 10);
- //依次在图中绘制出每条线段
- for (int i = 0; i < lines.Size; i++)
- {
- /*
- VectorOfPoint vp = lines[i];
- Point pt1 = vp[0];
- Point pt2 = vp[1];
- */
- VectorOfInt vi = lines[i];
- Point pt1 = new Point(vi[0], vi[1]);
- Point pt2 = new Point(vi[2], vi[3]);
- CvInvoke.Line(dstImage, pt1, pt2, new MCvScalar(186, 88, 255), 1, LineType.AntiAlias); //LineType.AntiAlias表示抗锯齿
- }
- CvInvoke.Imshow("SourceImage", srcImage); //显示原始图
- CvInvoke.Imshow("CannyImage", tempImage); //显示Canny边缘检测后的图
- CvInvoke.Imshow("HoughTransformImage", dstImage); //显示霍夫变换后的效果图
- CvInvoke.WaitKey(0);
- }
- }
- }
复制代码
运行后,出现如下异常提示(提示以上代码中第32行有问题):
Emgu.CV.Util.CvException:“OpenCV: channels() == ((((dtype) & ((512 - 1) << 3)) >> 3) + 1)”
各种百度,调试,都找不到异常原因,有大神知道错误原因吗?感激不尽~
|
|