2014-07-21 3 views
1

이미지를 읽는 프로젝트에서 Mat 데이터 유형으로 데이터를로드하고 있습니다. 그런 다음 몇 가지 작업을 수행합니다.이미지의 색상을 변경하지 않고 opencv의 색 공간을 변경하십시오.

내 모든 작업은 색 공간이 RGB 인 것으로 가정합니다 (BGR은 그런 식으로 opencv를 저장합니다). 모든 것이 잘 작동합니다. 출력 이미지를 YUV 형식으로 변환하는 실험을하고있었습니다. 하지만 다음 명령을 사용하여 BGR2YUV에서 출력 이미지를 변환하면 결과 이미지 색이 완전히 변경된다는 것을 알게되었습니다.

cvtColor(img,out,CV_RGB2YCrCb); 

예를 들어 출력 RGB 이미지는 녹색입니다. 이것을 YUV 형식으로 변환하고 결과 이미지를 표시하면 파란색이 아닌 녹색으로 나타납니다. 출력이 녹색이되도록 변환 할 방법이 필요합니다.

이미지의 색상을 변경하지 않고 색상 공간을 RGB에서 YUV로 어떻게 바꿀 수 있습니까?

+0

같은 색의 표현/코딩 시스템이 두 가지로 다르기 때문에. RGB에서 YUV로 픽셀 색상 값을 전송할 때 표현 코드가 변경 될 수 있지만 내 눈과 동일하게 보일 것입니다. – Luniam

답변

0

이미지의 색상은 변경되지 않았으며 코딩 만 변경되었습니다. 색상을 YUV로 변환 한 다음 imshow()을 사용하면 색상이 여전히 RGB라고 가정하므로 색상이 잘못 표시됩니다. YUV 이미지가 있고이를 표시하려면 먼저 이미지를 RGB로 다시 변환해야합니다.

"이미지의 색상을 변경하지 않고 색상 공간을 RGB에서 YUV로 어떻게 바꿀 수 있습니까?" 당신은 본질적으로 "어떻게 색 변환을하지 않고도 색 변환을 할 수 있습니까?"라고 말하고 있습니다. 물론 불가능합니다.

+0

그래서 imshow와 imwrite는 둘 다 RGB 형식 만 인식 할 수 있습니다. YUV 형식의 MAT가 있다면 imshow 또는 imwrite를 사용하여 먼저 RGB로 변환해야합니다. – Luniam

+1

예, 매트는 숫자 배열입니다. 프로그래머 만이 YUV인지 RGB인지를 알 수 있습니다. – Bull

+0

그럼 또 다른 질문이 있습니다. 때로는 카메라에서 직접 데이터를 YUV 형식으로 캡처합니다 (예 : 태블릿의 카메라). 그런 경우 출력 이미지 색상을 디스플레이에 올바르게 표시하려면 RGB를 YUV로 변환해야합니다. ? – Luniam