2014-02-22 1 views
0

V 채널 이미지 만 표시하고 싶으므로이 글을 쓴 이유는 무엇입니까? 컴파일 할 수는 있지만 imshow ("V", V)를 실행하면 실행할 수 없습니다.HSV 시스템에서만 V 채널에 액세스

#include <opencv2/opencv.hpp> 
    using namespace cv; 
    int main(){ 
    Mat image; 
    Mat V; 
    namedWindow("Gray image", 2); 
    while(1){ 
image = imread("d://Gaa6P.png", 1); 
     for (int r=0; r< image.rows; r++){ 
     for(int c =0;c< image.cols; c++){ 
      Vec3b intensity= image.at<Vec3b>(r, c); 
      uchar v=intensity.val[2]; 
      V.at<uchar>(r,c)=v; 
      } 
      } 
     imshow("Gray image", image); 
     imshow("V",V); 
     waitKey(0); 
      } 
    return 0; } 

감사합니다.

#include <opencv2/opencv.hpp> 
using namespace cv; 
int main(){ 
Mat image; 
Mat V; 
namedWindow("Gray image", 2); 
while(1){ 
image = imread("d://Gaa6P.png", 1); 
cvtColor(image,image,CV_RGB2HSV); 
V.create(image.rows,image.cols,CV_8UC1); 
    for (int r=0; r< image.rows; r++){ 
    for(int c =0;c< image.cols; c++){ 
     Vec3b intensity= image.at<Vec3b>(r, c); 
     uchar v=intensity.val[0]; 
     V.at<uchar>(r,c)=v; 
     } 
     } 
    imshow("Gray image", image); 
    imshow("V",V); 
    waitKey(0); 
     } 
    return 0; } 
+0

V.at 은 hsv가 3 채널이므로 나쁜 생각입니다. 그것을 만드십시오 : Mat V (h, w, CV_8U); V.at (r, c) = 강도 [2]; – berak

+0

또는 다음과 같이하십시오. Mat chan [3]; 스플릿 (HSV, chan); // chan [2] 사용; – berak

+0

@berak :'V.at (r, c) = intensity [2];는 잘못된 방법입니다. 그것은'V.at (r, c) = intensity.val [2];이어야한다. ' – skm

답변

1

직접 intensityVec3f 타입이기 때문에 float v=intensity[2];를 작성하여 V-channel의 값을 얻을 수 없습니다.

그래서, 당신은 다음과 같은 사용 V-channel에 강도 값에 액세스하려면 : 코드의 문제였다

float v=intensity.val[2]; 

.

둘째, 난 당신이

float v= (float) intensity.val[2];

+0

감사합니다. uchar v = intensity.val [2]; 그러나 나는 아직도 이미지를 얻을 수 없다. 분할 기능을 사용하여 이미지를 얻을 수 있지만 이미지를 가져올 수없는 이유는 모르겠다. :) 모든 코드를 여기에 추가합니다 : – Diame

+0

@Diame : 코드가 잘 보이지만'Mat V;를 선언 한 후'V.create (image.rows, image.cols, CV_8UC1);를 사용하십시오 – skm

+0

고마워, 작동합니다. – Diame

0

당신은 즉, 부동 소수점으로 값을 변환 한 후 배역을 <uchar>

Vec3b intensity= HSV.at<Vec3b>(r, c);

를 사용하는 것이 좋습니다 것입니다 메모리가 아직 초기화되지 않은 이미지 V에 값을 할당합니다. imread를 수행 한 후에는 다음을 작성해야합니다.

V.create(image.size(), CV_8U); 

읽고있는 png 이미지가 RGB가 아닌 HSV 형식입니까?

+0

당신의 상기시켜 줘서 고마워, 난 cvtColor (이미지, 이미지, CV_RGB2HSV) 추가; 지금. – Diame