读取并显示图片
/home/warmtree/下载/M1_ComputerVision/Lab2/basic/basic.cpp:12: warning: character constant too long for its type
char* imageName = '/home/warmtree/下载/M1_ComputerVision/Lab2/Lena.jpg'; //图像路径
第一次用char* imageName
来写文件路径,出现编译错误,char更合适用cmd窗口执行时添加图片路径int main(int argc, char** argv)
,例如char* imageName = argv[1]; //图像路径
,最后换用String
才算成功把路径导入:)
int main( )
{
String imageName("/home/warmtree/下载/M1_ComputerVision/Lab2/Lena.jpg");
//char* imageName = argv[1]; //图像路径
Mat image; //新建图像对象
image = imread(imageName, 1); //1 表示BGR格式读取,RGB排列顺序
Mat gray_image;
cvtColor(image, gray_image, COLOR_BGR2GRAY); //颜色通道转换 BGR-->Gray
//imwrite("../../images/Gray_Image.jpg", gray_image); //保存图像
namedWindow("Original image", WINDOW_AUTOSIZE); //新建窗口
namedWindow("Gray image", WINDOW_AUTOSIZE);
imshow("Original image", image); //与窗口对应来显示图片
imshow("Gray image", gray_image);
waitKey(0); //0ms 表示无限等待 知道用户按下按键
destroyAllWindows(); //关闭所有窗口
return 0;
}
基础操作熟悉python可以轻易的转化成C++,imread
读取,imwrite
保存,imshow
显示
颜色空间变换
BGR格式:在opencv中,其默认的颜色制式排列是BGR而非RGB。所以对于24位颜色图像来说,前8-bit是蓝色,中间8-bit是绿色,最后8-bit是红色。
1.从BGR引申:常见图像格式。
2.颜色通道转换:cvtColor()详解,这里我们用到了彩色图像转灰度图像。一般,我们都可以把这种颜色通道计算式变换成矩阵形式,输入输出为列向量色彩通道。
3.色彩空间变化: opencv2.x时颜色空间转换code用的宏定义是CV_前缀开头,而在opencv3.x版本其颜色空间转换code宏定义更改为COLOR_开头。
从RGB空间到lαβ空间的转换需要进行3次变换,即RGB->CIEXYZ->LMS->lαβ,其中,LMS->lαβ是基于对数据的主成分分析(PCA,Principal Component Analysis)得到的,其中l为第一主成分,α为第二主成分,β为第三主成分。
4.常见的R,G,B通道的取值范围:
取值 | 类型 |
---|---|
0-255 | CV_8U类型图片 |
0-65535 | CV_16U类型图片 |
0-1 | CV_32F类型图片 |
对于非线性转换,输入的RGB图像必须归一化到其对应的取值范围来或得最终正确的转换结果,一定要注意归一化问题,
img *= 1.0/255;
cvtColor(img, img,CV_BGR2Luv);