2009-11-06 4 views
1

rgb 이미지를 C#에서 이와 동등한 hsv 이미지로 변환하려고합니다. 변환을 수행하는 여러 알고리즘을 찾았지만 이미지를 계산 한 후에 이러한 값을 저장하는 방법을 찾지 못했습니다.rgb 이미지를 hsv로 변환

예를 들어 계산 후 h = 287, s = 0.5, v = 0.34. 이미지 파일에이 값을 저장하여 어디에서 hsv 이미지로 변환해야합니까?

답변

2

일반적으로 시스템은 RGB로 이미지를 처리합니다. HSV 공간에서 일부 처리를하려면 HSV로 변환하는 경우 픽셀을 HSV로 변환하고 처리 한 다음 BACK으로 변환하여 저장하십시오 최종 RGB 값

전혀 변경하지 않고 이미지를 RGB에서 HSV로 변환하면 IMHO는 거의 쓸모가 없습니다 (정확히 똑같은 이미지로 끝남).

1

이미지를 처리해야 할 때마다 HSV 값을 재사용하는 데 관심이있는 경우 이미지를 보유 할 수있는 이진 파일을 작성할 수 있습니다. 이는 어떤 형태로든 이미지의 복제를 포함하지만, 이러한 값이 필요하고 큰 이미지 크기로 인해 여러 프로세스가있을 경우 변환 단계를 피하고자 할 때 유용 할 수 있습니다. 그러나 일반적으로 RGB 값을 읽고 HSV로 변환하고 처리 한 다음 다시 RGB로 변환하고 처리 된 이미지를 저장합니다.

이미지 파일에 HSV 값을 저장하고이 채널의 "맵"으로 표시하려면 HSV 값을 RGB 간격으로 매핑하는 것으로 생각할 수 있습니다. RGB 값은 0-255 간격으로, HSV에서는 색조가 0 - 360, S 및 V가 0.0 - 0.1입니다. - 만약로 곱하므로, 255 공백

G = S * 255; 
B = V * 255; 

가 H 값으로는 0에 매핑해야 이는 255로 곱하여 S 및 V G의 값 및 B를 저장할 수 있음을 의미 (255/360) R 구성 요소에 저장하십시오.

R = H * 255/360; 
+0

RGB 값을 읽고 HSV로 변환하고 있지만 이미지를 HSV 형식으로 저장하고 싶습니다. 어떻게해야합니까? 예를 들어 제가 첫 번째 게시물에서 제시 한 예를 고려해 보면 이미지를 HSV 형식으로 얻으려면 어디에서이 값을 할당해야합니까? – tuxmaul

+0

질문해야 할 질문은 픽셀 값을 HSV 트리플로 저장하는 이미지 형식이있는 경우입니다. 개인적으로 그러한 형식에 대해 들어 본 적이 없습니다. 아마도 어떤 이미지 형식을 사용하는지 말할 수 있습니까? PNG, JPEG, GIF입니까? 이와 같은 공통 이미지 형식을 사용하는 경우 HSV 값을 손상시키지 않고 HSV 값을 직접 저장할 수 없으므로 HSV 값을 RGB가 될 것으로 기대하는 다른 프로그램에서 읽을 수 없게 될 가능성이 있습니다. – luvieere

+0

사실 나는해야 할 일이 있었고 첫 번째 그림 상자에 rgb 이미지를로드하고 색 공간 변환 옵션 (rgb -> hsv 및 hsv -> rgb 포함) 중 하나를 선택하여 표시합니다. 두 번째 그림 상자에서 변환 된 이미지. 나는 rgb -> hsv 및 hsv -> rgb를 제외한 모든 작업을 완료했으나 HSV로 이미지를 저장할 수 없다면 왜 내 강사가 hw에이 옵션을 추가했는지 설명 했습니까? 나는 지금 정말로 혼란 스럽다. ... – tuxmaul

2

방문 OpenCV documentationcvCvtColor 함수 내에서 자세히 살펴 : 그래서 거기는 마지막 조각이다. 여기서 "트릭"은 OpenCV에서 HSV 값을 저장하는 데 사용됩니다. 예를 들어, 8 비트 이미지를 저장하려면 : V는 255 * V를 얻고, S는 255 * S를 얻고 H는 H/2가됩니다.

+0

예. 이미지를 hsv 형식으로 가져 오려면이 값을 어디에 할당해야합니까? 예를 들어 이미지를 CMY로 변환 할 때 C = 1-R, M = 1-G, Y = 1-B 및 R = C, G = M, B = Y이므로 어디에 할당해야합니까? H, S, V 값은? – tuxmaul

+0

문제를 이해하고 있다면 이미지 표현이 메모리에 의존합니다. 예를 들어, OpenCV는 3 개의 2D 어레이를 채널 당 하나씩 사용할 수 있습니다. 따라서 행 10, 열 20의 픽셀에 대해 V [10] [20] = max (R [10] [20], G [10] [20], B [10] [20] V.의 색상 변환 공식에 따라 메모리의 이미지 표현은 사용중인 라이브러리에 따라 다릅니다. –

+1

도움이 될 수 있습니다. http://thsant.blogspot.com/search/label/opencv. 모니터와 시스템의 그래픽 환경은 RGB 이미지를 표시 할 수 있습니다 (모니터 *는 RGB 장치이기 때문에). 색 공간 변환을 적용했다고 가정 해 보겠습니다. 이미지에는 첫 번째 채널, 두 번째 채널 및 세 번째 채널에 대한 값이 있습니다. 이 시스템이 RGB, HSV 또는 YCrCb 채널인지는 아마 알 수 없습니다. 대부분의 시스템은 이미지를 RGB 이미지로 표시하여 호기심 많은 "잘못된 색상의"이미지를 생성합니다. –

관련 문제