2013-08-05 1 views
1

매트의 모든 픽셀을 수동으로 변경하려고합니다.
간단히하기 위해 각 픽셀을 검정색으로 색칠하고 싶다고합시다. 이 행/COL의 모든 가능한 조합을 읽는이, 매트에서 모든 픽셀을 통해 이동해야처럼
OpenCV - 매트의 모든 픽셀에 액세스 할 수 없습니다.

for (int i = 0; i < imageToWorkWith.rows; i++) { 
    for (int j = 0; j < imageToWorkWith.cols; j++) { 
     imageToWorkWith.at<cv::Vec3b>(i,j) = cv::Vec3b(0,0,0); 
    } 
} 

논리적으로 보인다 : 나는 다음과 같은 방법을 사용하고 있습니다.
아쉽게도이 방법은 효과가 없습니다. 모든 이미지에 대해 열의 "덩어리"가 누락되었습니다. 이 이미지를로드 할 때 예를 들어, :
enter image description here
결과는 이것이다 :
enter image description here
이 "덩어리"내가 부족에 상관없이 내가 사용하는 어떤 이미지, 같은 크기입니다. 그 이유를 이해할 수없는 것 같습니다. 나는 "at"함수에 대한 row/col의 순서가 (행, 열)임을 알고 있지만, 나는 그것들을 단지 킥을 위해 바꾸려고 시도했다. 물론 그 결과는 더 나쁘다.

여기서 내가 무엇을 놓치고 있습니까? 모든 행/열을 루핑하는 것으로 충분하지 않습니까?

+0

모든 것이 정확하다고 보이며, imageToWorkWith.cols의 값을 기록하려고합니다. 올바른지 아닌지. 숫자 또는 행이 열 수에 의해 정상적으로 작동하고 있습니다. –

+3

중복 가능성이 있음 [픽셀 수정으로 인해 전체 이미지가 표시되지 않음] (http://stackoverflow.com/questions/17660905/pixel-modifications-does-not-cover-whole) -image) – Aurelius

+0

@Aurelius, 예! 나는 그 문제를 연구 할 때 내가 어떻게 그것을 놓쳤는 지 모른다. 어쨌든, 문제는 정말로 4 채널이 있고 3가 아닌 이미지였습니다. –

답변

0

기본적으로 Vec3b 대신 Vec4b를 사용합니다. 기본적으로 이미지는 ios에 4 개의 채널이 있습니다. 결과는 완전 흰색이됩니다.

for (int i = 0; i < imageToWorkWith.rows; i++) { 
    for (int j = 0; j < imageToWorkWith.cols; j++) { 
     imageToWorkWith.at<cv::Vec4b>(i,j) = cv::Vec4b(0,0,0); 
    } 
} 
관련 문제