2012-02-21 3 views
2

Canny 엣지 감지 및 이미지의 Hough 변환을 수행하는 iOS (ARC 사용) 용 앱을 작성하고 y 특정 부분에서 수평선의 위치입니다. 이를 위해 OpenCV 라이브러리를 사용하고 있습니다.iOS의 cv :: HoughLines에 'OpenCV Error : Assertion failed'가 발생하여 실패합니다.

캐니 (Canny) 가장자리 감지는 쉽게 수행 할 수 있지만 매번 cv::HoughLines 메서드가 실패하고 불쾌한 어설 션 오류가 발생합니다. 처음에는

cv::cvtColor(myImage, inputImage, cv::COLOR_RGB2GRAY); 

cv::Canny(inputImage, outputImage, 200, 600); 

cv::Vec2f lines; // short for 'Vec<float, 2>' 
cv::HoughLines(outputImage, lines, 1, CV_PI/180, 100); 

내가 Vec2f이 올바른지 여부를 확신하지 못했습니다, 그래서 나는, cv::HoughLines 대신 ... 그러나 cv::Matlines를 정의도 시도했다 : 여기에 내가 시도하고있는 무슨의 코드는 전혀 데이터를 반환하지 않습니다. 적어도 체크 할 때가 아닙니다. cv::countNonZero(lines)

iOS 및 Objective-C에 대해 상당히 새롭고 (적은 C 기반 코딩 배경에서 나온 것임) 모든 수정 사항 및 팁을 크게 높이 평가할 것입니다.

+0

자신을 도와 전체 오류 메시지를 붙여 넣으십시오. – karlphillip

+0

@karlphillip Vec2f를 '회선'으로 사용하여 얻는 모든 오류는 OpenCV 오류 : 릴리즈에서 파일/Users/robin/Projects/OpenCVForiPhone/opencv/opencv/modules/core/src의 어설 션 실패 (k == STD_VECTOR_MAT)입니다. /matrix.cpp, line 1369' – RobW

답변

3

The docs 이것에 대해 꽤 많은 명확 :

std::vector<cv::Vec2f> lines; 
cv::HoughLines(outputImage, lines, 1, CV_PI/180, 100); 

을 당신이 더 이상 문제가 예를 찾기 위해 노력하는 경우 : 말했다

void HoughLines(Mat& image, vector<Vec2f>& lines, double rho, double theta, int threshold, double srn=0, double stn=0) 

, 당신은 std::vector<cv::Vec2f>에 매개 변수 유형을 변경해야 이 함수는 FiducialDetector과 같이 사용합니다.

+1

대단히 감사합니다. @karlphillip, 오류를 없앴습니다! 지금은 꽤 명백하게 보입니다. 그러나'std ::'를 사용해야한다는 생각을하지 못했습니다 ... 저는 OOP에는 익숙하지만 C++에는 익숙하지 않습니다 – RobW

+1

고마워요! 내 문제는'cv :: Vec2f' 대신'cv :: vector'를 사용하는 것이 었습니다! – kelin

관련 문제