opencv学习记录04:读写图像、读写像素、修改像素值---灰度处理反色处理

1、读写图像

int main() {
	Mat src, gray_src;
	src = imread("F:\\opencv_work\\05读写图像像素修改像素值\\Project1\\27.jpg");
	//	if (src.empty())    
	//{
	//	cout << "can not find image" << endl;
	//	return -1;
	//}
	namedWindow("总舵主的自画像", WINDOW_AUTOSIZE);
	imshow("总舵主的自画像", src);

2、读写像素

heights = src.rows;
weights = src.cols;
int nc = src.channels();
	for (int row = 0; row < heights; row++) {
		for (int col = 0; col < weights; col++)
}

3、修改像素值

单通道反差处理

	for (int row = 0; row < heights; row++) {
		for (int col = 0; col < weights; col++) {
			int gray = gray_src.at<uchar>(row, col);
			gray_src.at<uchar>(row, col) = 255 - gray;	
		}
	}

多通道反差处理

heights = src.rows;
	weights = src.cols;
	int nc = src.channels();
	for (int row = 0; row < heights; row++) {
		for (int col = 0; col < weights; col++) {
			if (nc == 1) {
				int gray = gray_src.at<uchar>(row, col);
				gray_src.at<uchar>(row, col) = 255 - gray;
			}

			else if(nc == 3){
				int b = dst.at<Vec3b>(row, col)[0];
				int g = dst.at<Vec3b>(row, col)[1];
				int r = dst.at<Vec3b>(row, col)[2];		
				dst.at<Vec3b>(row, col)[0] = 255 - b;
				dst.at<Vec3b>(row, col)[1] = 255 - g;
				dst.at<Vec3b>(row, col)[2] = 255 - r;

相关API
bitwise_not直接实现发差处理

4、实现代码

#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>

using namespace cv;

int main() {
	Mat src, gray_src;
	src = imread("F:\\opencv_work\\05读写图像像素修改像素值\\Project1\\27.jpg");
	//	if (src.empty())    
	//{
	//	cout << "can not find image" << endl;
	//	return -1;
	//}
	namedWindow("总舵主的自画像", WINDOW_AUTOSIZE);
	imshow("总舵主的自画像", src);

	cvtColor(src, gray_src, COLOR_BGR2GRAY);  //三通道转单通道

	namedWindow("总舵主的灰度像", WINDOW_AUTOSIZE);
	imshow("总舵主的灰度像", gray_src);

	int heights = gray_src.rows;
	int weights = gray_src.cols;
	//单通道图像反差处理
	for (int row = 0; row < heights; row++) {
		for (int col = 0; col < weights; col++) {
			int gray = gray_src.at<uchar>(row, col);
			gray_src.at<uchar>(row, col) = 255 - gray;	
		}
	}
	//怎么样去读取新的通道的值
	////三通道图像反差处理
	Mat dst;
	//dst.create(src.size(), src.type());
	dst = src.clone();	
	heights = src.rows;
	weights = src.cols;
	int nc = src.channels();
	for (int row = 0; row < heights; row++) {
		for (int col = 0; col < weights; col++) {
			if (nc == 1) {
				int gray = gray_src.at<uchar>(row, col);
				gray_src.at<uchar>(row, col) = 255 - gray;
			}

			else if(nc == 3){
				int b = dst.at<Vec3b>(row, col)[0];
				int g = dst.at<Vec3b>(row, col)[1];
				int r = dst.at<Vec3b>(row, col)[2];		
				dst.at<Vec3b>(row, col)[0] = 255 - b;
				dst.at<Vec3b>(row, col)[1] = 255 - g;
				dst.at<Vec3b>(row, col)[2] = 255 - r;

	//gary_src.at<uchar>(row, col) = min(r, min(g, r));
			}
			}
		}
	//API
	/*bitwise_not(src,dst);*/

	namedWindow("舵主的灰度转换图像", WINDOW_AUTOSIZE);
	imshow("舵主的灰度转换图像",gray_src);
	imshow("舵主的三通道转换图像", dst);
	waitKey(0);
	return(0);
}

效果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Cai_Xu_Kun/article/details/107607419