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; }
V.at은 hsv가 3 채널이므로 나쁜 생각입니다. 그것을 만드십시오 : Mat V (h, w, CV_8U); V.at (r, c) = 강도 [2]; –
berak
또는 다음과 같이하십시오. Mat chan [3]; 스플릿 (HSV, chan); // chan [2] 사용; – berak
@berak :'V.at (r, c) = intensity [2];는 잘못된 방법입니다. 그것은'V.at (r, c) = intensity.val [2];이어야한다. ' –
skm