hi guys, im new to openCv and image processing in general and i need to draw the lines in real time from a camera input. it working fine until i try to draw in the original image the lines detected with houghlines(). here is my code:
int main(int argc, char* argv[])
{
Mat input;
Mat HSV;
Mat threshold;
Mat CannyThresh;
Mat HL;
cv::VideoCapture capture;
capture.open(0);
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
while (true){
capture.read(input);
cvtColor(input, HSV, COLOR_BGR2HSV);
inRange(HSV, Scalar(H_MIN, S_MIN, V_MIN), Scalar(H_MAX, S_MAX, V_MAX), threshold);
MorphOps(threshold);
Canny(threshold, CannyThresh, 100, 50);
std::vector<Vec4i> lines;
HoughLines(CannyThresh, lines, 1, CV_PI/180, 150, 0, 0 );
for( size_t i = 0; i < lines.size(); i++ )
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
line( input, pt1, pt2, Scalar(0,0,255), 3, CV_AA);
}
imshow("camera", input);
waitKey(30);
}
return 0;
}
im getting the following exception:
First-chance exception at 0x74DB3E28 in Proyecto0.1.exe: Microsoft C++ exception: cv::Exception at memory location 0x00D6F47C.
i know the error is happening in the
for( size_t i = 0; i < lines.size(); i++ )
line because if i comment everything inside the for loop, i still get the same error, but if i remove the whole for-loop, it doesnt throws the exception. any ideas of what may be happening?
EDIT #1
the debugger doesn't throw any errors. but in the console of the program it says
OpenCV Error:Assertion failed (channels() == CV_MAT_CN(dtype)) in cv::Mat::copyTo, file C:\builds\master_packSlave-Win32-vc12-shared\opencv\modules\core\src\copy.cpp, line 281. Also the last call in the call stack is this:
> KernelBase.dll!_RaiseException@16() Unknown , im starting to thing is an opencv problem and not a code problem, maybe something with that dll.
EDIT #2
i changed the line
std::vector<Vec4i> lines;
with the line
std::vector<Vec2f> lines;
And now it enters to the for-loop. but then agin it throws me a segmentation fault. in the auto variables windows on visual studio i see that the values of the variables i, lines.size, rho and theta are a little odd when it throws the exception:
i=19470, lines.size=534760974, rho =2.42330915e-038, theta = 0.000000