概述
目录
读写图像
转灰度
对颜色取反(单通道(也就是为灰度图时))
多(3)通道
读写图像
imread 可以指定加载为灰度或者RGB图像
Mat src = imread("D:/opencv/2/a.jpg",IMREAD_GRAYSCALE);//把图片显示为灰度照片
Imwrite 保存图像文件,类型由扩展名决定
Mat output_image;
cvtColor(src, output_image, COLOR_BGR2HLS);
imwrite("D: / haha.jpg", output_image);
转灰度
/*方法1*/
/*读取的时候采用灰度读取*/
Mat gray_src= imread("D:/opencv/2/a.jpg",0);
//Mat gray_src= imread("D:/opencv/2/a.jpg",IMREAD_GRAYSCALE);//把图片显示为灰度照片
/*方法2*/
Mat gray_src;
cvtColor(src,gray_src,COLOR_BGR2GRAY);
对颜色取反(单通道(也就是为灰度图时))
/*方法1*/
//对颜色取反
bitwise_not(src,dst);
imshow("output",dst);
/*方法2*/
//下列for循环原理相同
//获得其行列和通道数
int rows = src.rows;
int cols = src.cols;
int channels = src.channels();
for(int row=0;row<rows;row++)
{
for(int col=0;col<cols;col++)
{
int gray=src.at<uchar>(row,col);
src.at<uchar>(row,col)=255-gray;
}
}
imshow("output",src);
多(3)通道
RGB三通道图像
img.at<Vec3b>(y,x)[0]=128; // blue
img.at<Vec3b>(y,x)[1]=128; // green
img.at<Vec3b>(y,x)[2]=128; // red
Mat gray_src;
cvtColor(src, gray_src, COLOR_BGR2GRAY);
for(int row=0;row<rows;row++)
{
for(int col=0;col<cols;col++)
{
int bgr[3];
for(int i=0;i<3;i++)
{
bgr[i]=src.at<Vec3b>(row,col)[i];
}
//同样是转灰度 这里是对每一个灰度图的每一个像素寻找其原图像bgr的最大最小值
gray_src.at<uchar>(row,col)=max(bgr[0],max(bgr[1],bgr[2]));
gray_src.at<uchar>(row,col)=min(bgr[0],min(bgr[1],bgr[2]));
}
}
imshow("gray",gray_src);
/*方法1*/
dst.create(src.size(),src.type());
for(int row=0;row<rows;row++)
{
for(int col=0;col<cols;col++)
{
int bgr[3];
for(int i=0;i<3;i++)
{
bgr[i]=src.at<Vec3b>(row,col)[i];
//对每个颜色取反处理
dst.at<Vec3b>(row,col)[i]=255-bgr[i];
}
}
}
imshow("rgb",dst);
/*方法2*/
Mat dst;
//rgb取反处理
bitwise_not(src, dst);
imshow("rgb", dst);
最后
以上就是怡然小甜瓜为你收集整理的笔记:OpenCV 【c++】图像操作的全部内容,希望文章能够帮你解决笔记:OpenCV 【c++】图像操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复