在进行RGBtoHSV转换OpenCv后知道像素值

时间:2011-10-19 21:34:11

标签: c++ opencv

我试图获取图像的H,S和V值,所以我将RGB图像转换为HSV,然后只是询问所需的值,然后打印它们。我不太确定我做对了,因为当打印值(hsV的V)时,我得到100+的值,我明白V只是0到100,也许我没有使用正确的方法,这里是代码:

#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;
}

2 个答案:

答案 0 :(得分:1)

这里的另一个答案是正确的,但这里是一个代码片段,我必须在opencv中计算V通道。我从Gimp app获得了值,这个函数给了我opencv值。

//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;
}

要在Gimp等其他应用程序中检查opencv HSV值,只需将公式计算为:

gimp_value = opencv_value * other_app_max_range / opencv_max_range

答案 1 :(得分:0)

你这样做的方式是正确的。只是价值观有点不同。

H理想情况下应该是0-360。但由于一个字节只能容纳0-255,因此H值减半。所以范围是0-180。

V和S使用0-255的整个范围来指定值和饱和度。

您可以在此处详细了解:http://opencv.willowgarage.com/documentation/python/miscellaneous_image_transformations.html#cvtcolor