05 不同通道图像的像素读取 改写

本文介绍如何在编程中访问和修改不同通道的图像像素,通过实例展示了具体的代码运行效果。
摘要由CSDN通过智能技术生成

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;
}

代码运行演示效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值