05 不同通道图像的 像素 读取 改写
#include<opencv2/opencv.hpp>;
#include<iostream>;
using namespace std;
using namespace cv;
int main(int argc, char* argv) {
Mat source1, change1;
source1 = imread("F:\\OpenCV-Test\\TestPicture\\SourcePicture1\\1.PNG");
if (source1.empty()) {
printf("can not load image ... \n");
return -1;
}
imshow("source1", source1);
/* 单通道读取像素值
cvtColor(source1,change1,6);//RGB转换为单通道
imshow("change1",change1);
*/
//3通道图像读取像素,参考 掩膜操作那节
change1.create(source1.size(),source1.type());
//.at 获取像素值 .ptr 获取地址
int rows = source1.rows;
int cols = source1.cols;
int nchannels = source1.channels();
for (int row = 0; row < rows; row++) { // 遍历图像
for (int col = 0; col < cols; col++) { // 遍历图像
if (nchannels==1) { //单通道 source1.at<uchar>(row, col);
int change1piex = source1.at<uchar>(row, col); //读取图像每个像素值
//change1.at<uchar>(row, col) = 255 - change1piex; //反差操作
// printf("单通道图像像素值\n");
}
else if(nchannels == 3){ //3通道 source1.at<Vec3b>(row, col)[0];
int B = source1.at<Vec3b>(row, col)[0]; //change1.at<Vec3b>(row, col)[0]=255-B;
int G = source1.at<Vec3b>(row, col)[1]; //change1.at<Vec3b>(row, col)[1]=255-G;
int R = source1.at<Vec3b>(row, col)[2]; //change1.at<Vec3b>(row, col)[2]=255-0;
//change1.at<uchar>(row, col) =max(R,max(B,G)); //将R B G最大值赋值给 灰度图像
//change1.at<uchar>(row, col) =min(R,min(B,G));
// printf("RGB三通道图像像素值\n");
}
else {
printf("not image");
}
}
}
bitwise_not(source1,change1); //反差函数,0改1,1改0;== for ...for...if...else if...
imshow("bitwise_not:change1 ",change1);
waitKey(0);
return 0;
}
代码运行演示效果: