2011-10-25 1 views
1

나는이 작업을 수행 :
1. 이제 가장자리가 mIntermediateMat에 있어야합니다 : 미안의 잘못이 때매트 객체에서 감지 된 픽셀을 찾는 방법은 무엇입니까?

Imgproc.Canny(mGraySubmat, mIntermediateMat, 50, 100); 

저를 중지합니다.
2. mIntermediateMat의 모든 픽셀은 0 또는 255의 색상 값을 가져야합니다 (mIntermediateMat.get (x, y)를 사용하여 값을 가져옵니다).
3. mIntermediateMat.type() => 매트 [480 * 640 * CV_8UC1, isCont = TRUE, FALSE = isSubmat, nativeObj = 0x139ec0, dataAddr = 0x4453d010]

mGraySubmat.type() => 매트 [480 * 640 * CV_8UC1, isCont = true, isSubmat = true, nativeObj = 0x1e8308, dataAddr = 0x450b4010

이제 Canny가 사각형과 비슷한 모서리를 감지했다고 가정 해 보겠습니다. 이제이 직사각형 내부의 시드 포인트에서 시작하여 북쪽, 남쪽, 동쪽, 서쪽으로 걸어 가서 가장자리에 도달 할 때까지 모든 픽셀 값을 확인합니다.

사진 여기 http://i.stack.imgur.com/JWVJW.png

있는 북한이 작동하는 것 같다에 산책 할 수 있습니다
결과를 참조하십시오. 좌표에서 발견 된 255의 픽셀 : x, y = 239,346 -> 오른쪽
남쪽 : x, y = 239,488에서 값 255 인 픽셀 (실제로는 488이 아님, 480이 최대이므로) -> 틀림
East : Pixel x, y = 342,388에서 255가 발견되었습니다 -> 틀림
웨스트 : 화면에서 벗어난 픽셀이 없습니다 ... -> 틀림
질문 : 무엇이 잘못 되었습니까? 내가 왜 걸 으면 가장자리 픽셀이 감지되지 않습니까?

중요 : 그림의 왼쪽과 왼쪽에는 100 픽셀 크기의 눈금이 있습니다. 원점은 왼쪽 상단에 있고 x, y = 100,350의 좌표는 오른쪽으로 100 픽셀, 아래로 350 픽셀입니다.

답변

1

I는 mIntermediateMat.get (x, y)를 사용하여 픽셀 색상 값을 가져 왔습니다. 그저 틀 렸습니다. 함수는 Mat.get (rows, cols)로 정의되므로 mIntermediateMat.get (y, x)가됩니다. 차이점을 보시겠습니까? 나는하지 않았다. 잃어버린 시간과 나를위한 또 다른 어리 석음 상을 많이.

관련 문제