OpenCV像素取反

一、概述

  案例:使用opencv加载一张彩色图片,并对这张彩色图片像素取反。

二、展示效果

三、示例代码

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;

int main(int argc, char const *argv[])
{
	//读取图片
	Mat src = imread("girl.jpg");
	//对图片像素取反
	Mat imageReverese;
	src.copyTo(imageReverese);

	//获取图片的宽高
	int channels = src.channels();
	int rows  = src.rows;
	int cols = src.cols*channels;
	// if(src.isContinuous()){
	// 	cols *= rows;
	// 	rows = 1;
	// }

	//每个像素点的通道255取反
	uchar * p1;
	uchar *p2;
	for(int row  = 0;row<rows;row++){
		p1 = src.ptr<uchar>(row);//获取像素指针
		p2 = imageReverese.ptr<uchar>(row);
		for(int col=0;col<cols;col++){
			*p2 = 255-*p1;//取反
			p2++;
			p1++;


		}
	}
	//创建windows
	//namedWindow("src",CV_WINDOW_AUTOSIZE);
	//namedWindow("target",CV_WINDOW_AUTOSIZE);

	//展示图片
	imshow("src",src);
	imshow("target",imageReverese);
	//关闭
	waitKey(0);
	//destroyWindow("src");
	//destroyWindow("target");
	return 0;
}

  

原文地址:https://www.cnblogs.com/tony-yang-flutter/p/15379353.html