我只想显示V通道图像,所以我写了这个,为什么我在尝试时失败了?
我可以编译它,但是当我imshow(“V”,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-channel
直接获得float v=intensity[2];
中的值,因为intensity
是Vec3f
类型。
因此,如果要访问V-channel
中的强度值,请使用以下命令:
float v=intensity.val[2];
那就是你的代码中的问题。
其次是,我建议您使用
<uchar>
即Vec3b intensity= HSV.at<Vec3b>(r, c);
和然后执行类型转换将值转换为float,即
float v= (float) intensity.val[2];
关于opencv - 仅在HSV系统中访问V channel ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21961301/