배우기 위해 일부 이미지 처리를하고 있습니다. 새 C++ iterface로 openCV를 사용하고 있습니다.OpenCV 이진 이미지 만 흰색 픽셀이 작동하지 않습니다.
나는 RGB 이미지를 가지고 있으며, 그레이 스케일 버전을 읽고, 히스토그램을 이퀄라이징 한 다음 canny를 사용하여 가장자리를 감지합니다.
질문 : Canny 함수는 그레이 스케일 이미지 또는 이진 이미지를 반환합니까? 저는 can for edge detector를 적용한 이미지의 픽셀 값을 확인하기 위해 double for 루프를 사용합니다. 그리고 나는 완전히 다른 값을 많이 가지고 있습니다. 바이너리 이미지에서 0 또는 1 (0 또는 255)의 값만 두 개 있어야합니다. 어떻게 할 수 있습니까?
내 코드 :
는imagen = imread(nombre_imagen,0); //lee la imagen en escala de grises
equalizeHist(imagen,imagen);
Canny(binary,binary,0.66*threshold,1.33*threshold,3,true);
for(int i=0;i<binary.rows;i++){
for(int j=0;j<binary.cols;j++){
std::cout << binary.at<float>(i,j)<< ",";
}
std::cout << "\n";
}
이것은 183x183 행렬 나는 값 심지어 일부 nan
을 많이 볼 수 있습니다. 어떻게이 바이너리를 만들 수 있습니까?
Canny 함수의 경우 그레이 스케일 이미지의 "평균"값을 얻는 임계 값을 사용합니다. 나는 그것을 여기에서 보았다 : http://www.kerrywong.com/2009/05/07/canny-edge-detection-auto-thresholding/.
다른 매트 이미지를 사용하면 같은 결과입니다 – matiasfh
그건 이상합니다. 내 프로그램에서는 다음과 같이 사용한다 : 'cv :: Mat after; cv :: Canny (m_mImage, 이후 50,120); ' 그리고 완벽하게 작동합니다. 어쩌면 L2gradient를 true로 설정하지 않고 시도해보십시오. 임계 값 기능이 올바르게 작동하는지 확인 했습니까? – Yax