2013-03-14 1 views
1

에서 검색 윤곽하지만 콜백 함수에 오류가 발생합니다그리기 나는 바이너리 이미지 <code>findContours</code>를 사용하고자하는 바이너리 이미지

Invalid address specified to RtlFreeHeap

반환.

내가 vector<vector<Point> > 값을 확보 clear()를 사용하려면, 동일한 예외가 발생하고, 코드 라인에서 free.c 추락 예 :

if (retval == 0) errno = _get_errno_from_oserr(GetLastError()); 

:

void onChangeContourMode(int, void *) 
{ 
    Mat m_frB = imread("3.jpg", 0); 
    vector<vector<Point>> contours 
    vector<Vec4i> hierarchy; 
    findContours(m_frB, contours, hierarchy, g_contour_mode, CV_CHAIN_APPROX_SIMPLE); 
    for(int idx = 0 ; idx >= 0; idx = hierarchy[idx][0]) 
    drawContours(m_frB, contours, idx, Scalar(255,255,255), 
    CV_FILLED, 8, hierarchy); 
    imshow("Contours", m_frB); 
} 

누구든지 나를 도울 수 있습니까? 고마워요!

답변

1
Mat m_frB = imread("3.jpg", CV_LOAD_IMAGE_GRAYSCALE); 
8bpp를 그레이 스케일 이미지로

로드 3.jpg, 그래서 바이너리 이미지를 아니에요. findContours 함수의 경우 "0이 아닌 픽셀은 1로 처리되고, 0 픽셀은 0으로 유지되므로 이미지는 이진 값" "으로 처리됩니다. 또한이 은 "윤곽을 추출하는 동안 이미지를 수정하는 기능"이입니다.

실제 문제는 대상 이미지가 8bpp이지만 RGB 윤곽선을 그리기 전에 CV_8UC3을 사용하여 3 개의 채널이 있는지 확인해야합니다. 이것을 시도하십시오 :

// find contours: 
vector<vector<Point> > contours; 
vector<Vec4i> hierarchy; 
findContours(m_frB, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE); 

// draw contours: 
Mat imgWithContours = Mat::zeros(m_frB.rows, m_frB.cols, CV_8UC3); 
RNG rng(12345); 
for (int i = 0; i < contours.size(); i++) 
{ 
    Scalar color = Scalar(rng.uniform(50, 255), rng.uniform(50,255), rng.uniform(50,255)); 
    drawContours(imgWithContours, contours, i, color, 1, 8, hierarchy, 0); 
} 
imshow("Contours", imgWithContours); 
+0

예, 맞습니다! drawContours()의 사용법을 알지 못했습니다. –

+0

@ YeCongLu : 환영합니다 :) – LihO

관련 문제