OPENCV学习笔记(3)---自学OPENCV---Mat对象的使用

代码

先上代码。
我自学的方式是先看代码,然后在代码中遇到不懂的再逐个查询资料,深入学习,直到学懂。大家按照符合自己的方式学习就好了,适合自己的才是最好的。共勉。

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

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
	//读写图像
	Mat src, gray_src;
	src = imread("E:/minions.jpg");
	if (src.empty())
	{
		cout << "error" << endl;
		return -1;
	}
	namedWindow("原图", WINDOW_AUTOSIZE);
	imshow("原图", src);

	cvtColor(src, gray_src, COLOR_BGR2GRAY);  ///将原图片转换位灰度图 
	namedWindow("灰度图", WINDOW_AUTOSIZE);
	imshow("灰度图", gray_src);


	//单通道反差图像
	int width = gray_src.cols;  ///分别获取gray_src 的宽度和高度
	int height = gray_src.rows;
	for(int row=0;row<height;row++)
		for (int col = 0; col < width; col++)
		{
		///读取一个灰度图的像素点的像素值
		///使用 img.at<uchar>(row,col)或img.at<uchar>(Point(col,row))
			int gray = gray_src.at<uchar>(row, col);  
			gray_src.at<uchar>(row, col) = 255 - gray;//实现像素的取反
		}
	namedWindow("单通道反差图像", WINDOW_AUTOSIZE);
	imshow("单通道反差图像", gray_src);

	//三通道反差图像
	Mat dst;
	bitwise_not(src, dst);//实现反转数组中的每个元素的功能,与之类似还有bitwise_and、bitwise_or
	namedWindow("三通道反差图像", WINDOW_AUTOSIZE);
	imshow("三通道反差图像", dst);


	//把CV_8UC1 转化到CV_32F1
	//src.convertTo(dst,CV_32F);   //dst 为CV_32F1型
	waitKey(0);
	return 0;
}

代码解释

之前已经解释过具体功能的代码就不进行解释了,如果想了解的话可以看下我之前的文章,毕竟咱们是在不断学习的过程中,要牢记旧知识,不断学习新知识。

//实现反转数组中的每个元素的功能,与之类似还有bitwise_and、bitwise_or
bitwise_not(src, dst);

bitwise_not(src, dst, mask)是对图像的每个像素实现二进制的“或操作”—全1则1,否则为0。其中的mask参数是可选的(mask参数是可选操作掩码,8位单通道数组,用于指定要更改的输出数组的元素):如果没有传递mask参数,则对src进行按位取反,即 dst = ~src;如果传递mask参数,则先按位取反,再按照mask进行取反。

各种处理后的结果图片对比:

可以看出进行单通道取反和三通道取反的效果。
在这里插入图片描述这篇opencv的学习笔记就这样结束了。
我是一个初学者,如果有相关的问题大家可以评论提出一起讨论,或指出我的错误之处,大家一起学习,一起进步,谢谢啦。

猜你喜欢

转载自blog.csdn.net/weixin_41963310/article/details/103230259
今日推荐