2011-10-19 4 views
1

イメージのH、S、V値を取得しようとしているので、RGBイメージを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チャネルを計算する必要があるコードスニペットです。私はGimpアプリケーションから価値を得て、この関数は私に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 
関連する問題