2013-06-21 3 views
4

enter image description hereopencv, BGR2HSV는 많은 인공물을 생성합니다.

이 이미지는 단지 하나의 예시입니다. 오른쪽 위는 원래 이미지, 왼쪽 위는 색조, 왼쪽 아래는 채도, 오른쪽 아래는 값입니다. 쉽게 볼 수 있듯이 H와 S는 인공물로 가득 차 있습니다. 결과가 많은 인공물을 선택하도록 밝기를 줄이고 싶습니다.

내가 뭘 잘못하고 있니?

내 코드는 간단하다 : 당신은 따라서 직사각형의 유물, 손실 압축 된 이미지로 작업

vc = cv2.VideoCapture(0) 
# while true and checking ret 
ret, frame = vc.read() 
frame_hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 
cv2.imshow("h", frame_hsv[:,:,0]) 
cv2.imshow("s", frame_hsv[:,:,1]) 
cv2.imshow("v", frame_hsv[:,:,2]) 
+0

이미지에서 읽고 새 코드를 쓰는 데 사용한 코드를 포함하여 완전히 재현 할 수있는 예제를 포함 할 수 있습니까? (원래 이미지를 포함하면 도움이 될 것입니다.) –

+0

코드로 수정했습니다. 나는 웹캠에서 읽었다. –

+0

다른 사람이 문제를 재현 할 수 있도록 대신 이미지에서 읽는 것이 도움이됩니다. 그러나 더 중요한 것은 유물, 특히 S 이미지에서 당신이 의미하는 바가 무엇인지 분명하지 않습니다. 원본 이미지의 그림자 인 흰색 영역을 의미합니까? '결과물이 많은 유물을 고른다 '는 것은 무엇을 의미합니까? 유물을 유지하려고합니까 아니면 제거 할 것입니까? –

답변

3

. 비디오를 사용하면 박람회 시간이 짧고 대역폭 제한 등을 가질 수 있습니다. 따라서 전반적인 화질이 저하됩니다. 당신은 할 수 있습니다

  • Capture 대신 VideoCapture 또는
  • 추출 5-10 비디오 프레임을 사용하여 여전히 샷 시리즈를 사용하고 평균.
+0

OpenCV에서 Capture 클래스를 찾을 수 없습니다. 다른 도서관 출신인가요? –

9

질문에 오해가 있다고 생각합니다. Boyko Peranov의 대답은 사실이지만, 제공 한 이미지에는 아무런 문제가 없습니다. 그 뒤에있는 논리는 다음과 같습니다. 카메라가 정의에 따라 입방체 인 RGB 색상 공간에서 사진을 찍습니다. 당신이 HSV 색 공간으로 변환 할 때, 모든 픽셀은 다음 콘에 매핑됩니다 콘의 각도는 HSV Cone

색조 (HSV의 첫 번째 채널), 채도 (HSV의 두 번째 채널은,라고 이미지의 채도)는 콘의 중심까지의 거리이며 Value (HSV의 세 번째 채널)는 원뿔의 높이입니다.

색조 채널은 일반적으로 0에서 360 사이에서 정의되며 0에서 빨간색으로 시작됩니다 (8 비트 이미지의 경우 OpenCV는 0-180 범위를 사용하여 the documentation에서 설명한 부호없는 문자에 맞 춥니 다). 하지만, 값 0과 359의 두 픽셀은 실제로 색상이 서로 가깝습니다. Flattened HSV cone

이 값은 조금 작은 비트 (지각 적으로 가까운 0에서 완벽하게 붉은 색과 빨간색 경우에도 : (채도가 최대 일 때) 바깥 쪽 표면을 취함으로써 HSV 콘을 병합 할 때 더 쉽게 볼 수있다 359 보라색),이 두 값은 멀리 떨어져 있습니다. 이것이 색조 채널에서 설명하는 "유물"의 원인입니다. OpenCV가 회색 음영으로 표시하면 검정색은 0으로, 흰색은 359로 매핑됩니다. 실제로는 매우 비슷한 색상이지만 회색 음영으로 매핑하면 너무 멀리 표시됩니다. 반 직관적 인 사실을 피할 수있는 두 가지 방법이 있습니다. 고정 된 채도와 값을 가진 H 채널을 RGB 공간으로 다시 캐스팅 할 수 있습니다. 이렇게하면 우리의 인식을 더 잘 표현할 수 있습니다. 또한 수학적 부작용을주지 않는 인식 (예 : Lab color space)에 따라 다른 색 공간을 사용할 수도 있습니다.

이러한 아티팩트 패치가 사각형 인 이유는 Boyko Peranov가 설명합니다. JPEG 압축은 픽셀을 대체하는 패치에 가까운 큰 사각형으로 픽셀을 대체하여 작동합니다. jpg를 만들 때 압축 품질을 매우 낮추면 RGB 이미지에도 이러한 사각형이 나타납니다. 품질이 낮을수록 크고 눈에 잘 띄는 사각형이됩니다. 이러한 사각형의 평균값은 빨간색의 농도에 대해 0과 5 사이 (검정색으로 표시됨) 또는 355와 359 사이 (흰색으로 표시됨)로 끝나는 단일 값입니다. 그것은 왜 "유물"이 사각형인지 설명합니다.

색조 채널에 JPEG 압축 아티팩트가 표시되는 이유는 무엇인지 직접 물을 수 있습니다. 이는 chroma subsampling으로, 지각에 기반한 연구에 따르면 우리의 눈은 급격한 강도 변화보다 색상이 급격하게 변하는 경향이 적음을 보여줍니다. 따라서 압축 할 때 JPEG는 의도적으로 채도 정보를 잃어 버립니다. 왜냐하면 우리는 어쨌든 그것을 알아 채지 않을 것이기 때문입니다.

스토리는 채도 (왼쪽 하단 이미지)의 흰색 변화 지점과 유사합니다. 당신은 픽셀을 검은 색으로 거의 묘사하고 있습니다 (원뿔의 끝 부분에 있음). 따라서 채도 값은 많이 다를 수 있지만 픽셀의 색상에는 거의 영향을 미치지 않습니다. 항상 검정색에 가깝습니다. 이것은 HSV 색상 공간의 부작용이기도합니다.

RGB (또는 OpenCV 용 BGR)와 HSV 간의 변환은 (이론상) 무손실입니다. HSV 이미지를 RGB로 다시 변환하면 처음부터 정확히 동일한 이미지를 얻을 수 있으며 이슈가 추가되지 않습니다.