我一直在尝试检测实时网络摄像头图像中的某些线条(边缘),因此我尝试使用C ++版本的OpenCV 3.2.0进行canny边缘检测,然后进行hough变换。
因为使用HoughLinesP看起来很简单,所以不应该有任何问题,但似乎我无法使其发挥作用。
问题是应该包含检测到的行的矢量输出充满了数百万的垃圾结果!
这就是我打电话给HoughLinesP的方式:
vector<Vec4i> lines;
HoughLinesP(cannyd, lines, 1, CV_PI/180.0, 100, 100, 10);
然后尝试输出检测到的行,如:
for (size_t i = 0; i < lines.size(); i++) {
Vec4i l = lines[i];
printf("line: %d %d %d %d\n", l[0], l[1], l[2], l[3]);
}
但我得到大约3-4百万行(检测后行向量的大小)!其中大多数是(0,0,0,0)。其他一些检测到的行看起来像这样:
line: 0 0 1161992204 -1946150912
line: 2000556868 1404 17730960 17730984
line: 17730968 17447528 2 2000558912
line: 0 0 0 0
line: 1163630597 -2147477248 0 17736008
line: 0 0 32 17736008
line: 0 1684957559 30575 0
line: 0 0 1163171842 -2147476992
这是完全奇怪的,因为输入图像的大小为640 * 480,这些数字几乎不正确。
感谢您的帮助
编辑:发布更多代码(根据@ Alexander的建议)
VideoCapture cap;
cap.open(0);
cap >> image;
cvtColor(image, gray, CV_BGR2GRAY);
blur(gray, gray, Size(3, 3));
Canny(gray, cannyd, 50, 150, 3);
// This is where above-mentioned Hough codes run