|
|
|
@ -894,7 +894,6 @@ cvHoughLines2( CvArr* src_image, void* lineStorage, int method, |
|
|
|
|
cv::Mat image = cv::cvarrToMat(src_image); |
|
|
|
|
std::vector<cv::Vec2f> l2; |
|
|
|
|
std::vector<cv::Vec4i> l4; |
|
|
|
|
CvSeq* result = 0; |
|
|
|
|
|
|
|
|
|
CvMat* mat = 0; |
|
|
|
|
CvSeq* lines = 0; |
|
|
|
@ -921,11 +920,13 @@ cvHoughLines2( CvArr* src_image, void* lineStorage, int method, |
|
|
|
|
elemSize = sizeof(int)*4; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if( CV_IS_STORAGE( lineStorage )) |
|
|
|
|
bool isStorage = isStorageOrMat(lineStorage); |
|
|
|
|
|
|
|
|
|
if( isStorage ) |
|
|
|
|
{ |
|
|
|
|
lines = cvCreateSeq( lineType, sizeof(CvSeq), elemSize, (CvMemStorage*)lineStorage ); |
|
|
|
|
} |
|
|
|
|
else if( CV_IS_MAT( lineStorage )) |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
mat = (CvMat*)lineStorage; |
|
|
|
|
|
|
|
|
@ -942,8 +943,6 @@ cvHoughLines2( CvArr* src_image, void* lineStorage, int method, |
|
|
|
|
linesMax = lines->total; |
|
|
|
|
cvClearSeq( lines ); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
CV_Error( CV_StsBadArg, "Destination is not CvMemStorage* nor CvMat*" ); |
|
|
|
|
|
|
|
|
|
iparam1 = cvRound(param1); |
|
|
|
|
iparam2 = cvRound(param2); |
|
|
|
@ -968,7 +967,7 @@ cvHoughLines2( CvArr* src_image, void* lineStorage, int method, |
|
|
|
|
|
|
|
|
|
int nlines = (int)(l2.size() + l4.size()); |
|
|
|
|
|
|
|
|
|
if( mat ) |
|
|
|
|
if( !isStorage ) |
|
|
|
|
{ |
|
|
|
|
if( mat->cols > mat->rows ) |
|
|
|
|
mat->cols = nlines; |
|
|
|
@ -981,20 +980,20 @@ cvHoughLines2( CvArr* src_image, void* lineStorage, int method, |
|
|
|
|
cv::Mat lx = method == CV_HOUGH_STANDARD || method == CV_HOUGH_MULTI_SCALE ? |
|
|
|
|
cv::Mat(nlines, 1, CV_32FC2, &l2[0]) : cv::Mat(nlines, 1, CV_32SC4, &l4[0]); |
|
|
|
|
|
|
|
|
|
if( mat ) |
|
|
|
|
if (isStorage) |
|
|
|
|
{ |
|
|
|
|
cv::Mat dst(nlines, 1, lx.type(), mat->data.ptr); |
|
|
|
|
lx.copyTo(dst); |
|
|
|
|
cvSeqPushMulti(lines, lx.ptr(), nlines); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
cvSeqPushMulti(lines, lx.ptr(), nlines); |
|
|
|
|
cv::Mat dst(nlines, 1, lx.type(), mat->data.ptr); |
|
|
|
|
lx.copyTo(dst); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if( !mat ) |
|
|
|
|
result = lines; |
|
|
|
|
return result; |
|
|
|
|
if( isStorage ) |
|
|
|
|
return lines; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1227,8 +1226,6 @@ cvHoughCircles( CvArr* src_image, void* circle_storage, |
|
|
|
|
double param1, double param2, |
|
|
|
|
int min_radius, int max_radius ) |
|
|
|
|
{ |
|
|
|
|
CvSeq* result = 0; |
|
|
|
|
|
|
|
|
|
CvMat stub, *img = (CvMat*)src_image; |
|
|
|
|
CvMat* mat = 0; |
|
|
|
|
CvSeq* circles = 0; |
|
|
|
@ -1255,12 +1252,14 @@ cvHoughCircles( CvArr* src_image, void* circle_storage, |
|
|
|
|
else if( max_radius <= min_radius ) |
|
|
|
|
max_radius = min_radius + 2; |
|
|
|
|
|
|
|
|
|
if( CV_IS_STORAGE( circle_storage )) |
|
|
|
|
bool isStorage = isStorageOrMat(circle_storage); |
|
|
|
|
|
|
|
|
|
if(isStorage) |
|
|
|
|
{ |
|
|
|
|
circles = cvCreateSeq( CV_32FC3, sizeof(CvSeq), |
|
|
|
|
sizeof(float)*3, (CvMemStorage*)circle_storage ); |
|
|
|
|
} |
|
|
|
|
else if( CV_IS_MAT( circle_storage )) |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
mat = (CvMat*)circle_storage; |
|
|
|
|
|
|
|
|
@ -1274,8 +1273,6 @@ cvHoughCircles( CvArr* src_image, void* circle_storage, |
|
|
|
|
circles_max = circles->total; |
|
|
|
|
cvClearSeq( circles ); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
CV_Error( CV_StsBadArg, "Destination is not CvMemStorage* nor CvMat*" ); |
|
|
|
|
|
|
|
|
|
switch( method ) |
|
|
|
|
{ |
|
|
|
@ -1288,17 +1285,17 @@ cvHoughCircles( CvArr* src_image, void* circle_storage, |
|
|
|
|
CV_Error( CV_StsBadArg, "Unrecognized method id" ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if( mat ) |
|
|
|
|
if (isStorage) |
|
|
|
|
return circles; |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
if( mat->cols > mat->rows ) |
|
|
|
|
mat->cols = circles->total; |
|
|
|
|
else |
|
|
|
|
mat->rows = circles->total; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
result = circles; |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|