2011-10-19 11 views
1

Im 이미지의 H, S 및 V 값을 얻으 려하므로 RGB 이미지를 HSV로 변환 한 다음 원하는 값을 물어 본 다음 인쇄하십시오. .. Im (Vs hsV) 값을 인쇄 할 때 100+의 값을 얻었고 V가 0-100으로 바뀌 었음을 이해하고 올바른 방법을 사용하지 않았기 때문에이 바로 알 수 없습니다. 코드 :RGBtoHSV 변환 후 픽셀 값 알기 OpenCv

#include "opencv/highgui.h" 
#include "opencv/cv.h" 
#include <cstdlib> 
#include <iostream> 
#include <stdio.h> 
using namespace std; 

int main(int argc, char** argv) { 
int i=0,total=0; 
IplImage* img = cvLoadImage(argv[1]); 
IplImage* hsv; 
CvSize size; 
int key = 0, depth; 


size = cvGetSize(img); 
depth = img->depth; 
hsv = cvCreateImage(size, depth, 3); 

cvCvtColor(img, hsv, CV_BGR2HSV); 

for(i=0;i<480;i++){ //asking for the values in \ form (1,1)(2,2),...(480,480)  
    CvScalar s; 

    s = cvGet2D(hsv,i,i);    
    printf("s=%f\n,s.val[2]); //s.val[2] equals to hs**V** right? 
} 
cvReleaseImage(&img); 
cvReleaseImage(&val); 
return 0; 
} 

답변

0

올바른 방식입니다. 그 값은 조금 다릅니다.

H는 이상적으로 0-360이되어야합니다. 그러나 바이트가 0-255만을 유지할 수 있기 때문에 H 값은 절반으로 줄어 듭니다. 따라서 범위는 0-180입니다.

V 및 S는 0-255의 전체 범위를 사용하여 값과 채도를 지정합니다.

당신은 여기에 대한 자세한 내용을보실 수 있습니다 : 여기 http://opencv.willowgarage.com/documentation/python/miscellaneous_image_transformations.html#cvtcolor

1

다른 대답은 정확하지만, 나는 여기에서 OpenCV의 V 채널을 계산하기 위해이 코드 조각입니다. 김프 응용 프로그램에서 값을 얻고이 함수는 opencv 값을 제공합니다.

gimp_value = opencv_value * other_app_max_range/opencv_max_range 
:
//Max values: App HSV H=360 S=100 V=100 OpenCV H=180 S=255 V=255 
double newHSV(double value) 
{ 
    //new_val = value * opencv_max_range/other_app_max_range 
    double newValue = value * 255/100; 
    return newValue; 
} 

단지에 공식을 계산, 김프와 같은 다른 응용 프로그램에서 OpenCV의 HSV 값을 확인하려면