OpenCV4图像处理--图像算术、位操作、像素信息统计

算术操作

  • 加减乘除
    API: add、subtract、multiply、divide
    PS: 进行操作的图像大小和类型必须一致
    code:
	Mat dst1, dst2, dst3, dst4;

	add(src1, src2, dst1);
	imshow("add-Demo", dst1);

	subtract(src1, src2, dst2);
	imshow("sub-Demo", dst2);

	multiply(src1, src2, dst3);
	imshow("mul-Demo", dst3);
	
	divide(src1, src2, dst4);
	imshow("div-Demo", dst4);
  • 图像亮度和对比度调整
    PS: 黑色(0,0,0),白色(255,255,255),对RGB图像来说,亮度越大值越高,因此,通过增加像素值就可以提高亮度,反之减小亮度,而对比度体现的是图像的差异度,需要让图片的像素乘以某个值,增大差异就增大了对比度。
    API: addWeighted 详细使用说明
    code:
	//打开原始图片
    Mat src3 = imread("F:/code/images/kobe.jpg",IMREAD_COLOR);
	if (src3.empty()) {
		cout << "fail to read image" << endl;
		return -1;
	}
	imshow("input3", src3);
	
	//创建与原始图一样大小和类型的空像素图
	Mat black = Mat::zeros(Size(src3.size()), src3.type());
	//imshow("black", black);
	black = Scalar(127,127,127);

	//对原始图进行像素操作
	Mat dst;
	add(src3, black, dst);//给图片加亮
	subtract(src3, black,dst);//给图片减亮
	//imshow("dst", dst);

	Mat dst2;
	addWeighted(src3,1.5,black,0.5,0.0,dst2);//增加对比度
	addWeighted(src3, 1.5, black, -0.5, 0.0, dst2);
	addWeighted(src3, 0.5, black, 0.5, 0.0, dst2);//伪装一下透明度:原始图像素乘以0.5
	imshow("dst2", dst2);

位操作

  • 位操作有什么好处:速度快,效果好

  • 与、或、非、异或 : bitwise_and、bitwise_or、bitwise_not、bitwise_xor

	//取反 非
	bitwise_not(src4, m1);
	imshow("bitwise not", m1);

	//与操作
	Mat m2;
	bitwise_and(src4, src4, m2);
	imshow("bitwise and", m2);

	//或操作
	Mat m3;
	bitwise_or(src4, src4, m3);
	imshow("bitwise or", m3);
	
	//异或操作
	Mat m4;
	bitwise_xor(src4, src4, m4);
	imshow("bitwise xor", m4);

在这里插入图片描述

  • 利用带 mask 操作
    ps: 通过 mask 设置感兴趣区域(ROI),针对感兴趣区域进行操作,例如提取等。
	//设置 mask  设置感兴趣区域  ROI
	Mat mask = Mat::zeros(src4.size(), CV_8UC1);
	int height = src4.rows / 2;
	int width = src4.cols / 2;
	for (int row = 0; row < height; row++) {
		uchar* curr_row = mask.ptr<uchar>(row);//指针访问
		for (int col = 0; col < width; col++) {
			//mask.at<uchar>(row, col) = 255;//数组访问
			*curr_row++ = 255;
		}
	}
	namedWindow("mask", WINDOW_NORMAL);
	resizeWindow("mask", Size(300, 200));
	imshow("mask", mask);

	//取反 非
	bitwise_not(src4, m1,mask);//设置mask 将感兴趣区域取反(非操作)
	namedWindow("bitwise not", WINDOW_NORMAL);
	resizeWindow("bitwise not", Size(300, 200));
	imshow("bitwise not", m1);

	//与操作
	Mat m2;
	bitwise_and(src4, src4, m2,mask);//设置mask将感兴趣区域提取出来(与操作)
	namedWindow("bitwise and", WINDOW_NORMAL);
	resizeWindow("bitwise and", Size(300, 200));
	imshow("bitwise and", m2);

	//或操作
	Mat m3;
	bitwise_or(src4, src4, m3, mask);设置mask将感兴趣区域(或操作)
	namedWindow("bitwise or", WINDOW_NORMAL);
	resizeWindow("bitwise or", Size(300, 200));
	imshow("bitwise or", m3);

	//异或操作
	Mat m4;
	bitwise_xor(src4, src4, m4, mask);设置mask将感兴趣区域(异或操作)
	namedWindow("bitwise xor", WINDOW_NORMAL);
	resizeWindow("bitwise xor", Size(300, 200));
	imshow("bitwise xor", m4);

在这里插入图片描述

像素信息统计

  • 像素最大值与最小值:minMaxLoc ,此API只支持单通道的图像
    求得单通道图像中,像素的最大值和最小值,以及他们分别的像素点位置坐标
	double min_val;
	double max_val;
	Point min_loc;
	Point max_loc;

	minMaxLoc(img, &min_val, &max_val, &min_loc, &max_loc);//注意,这个 img 要是单通道

	printf("min:%.2f,max:%.2f\n", min_val, max_val);
	printf("minloc:(%d,%d),maxloc:(%d,%d)\n", min_loc.x, min_loc.y,max_loc.x,max_loc.y);
  • 像素均值和方差:mean meanStdDev
	Scalar s = mean(img);//获取三通道图像的均值
	printf("mean:%.2f,%.2f.%.2f\n", s[0],s[1],s[2]);

	Mat mm, mstd;
	meanStdDev(img, mm, mstd);//save 3 channels mean and stddev
	printf("mm:%.2f,%.2f,%.2f mstd:%.2f,%.2f,%.2f\n", mm.at<double>(0, 0),mm.at<double>(1, 0), mm.at<double>(2, 0), 
		mstd.at<double>(0, 0), mstd.at<double>(1, 0), mstd.at<double>(2, 0));
  • 像素值信息统计:通过遍历像素值做统计
    定义一个整型的 vector , 大小为256,因为像素值的大小是:0-255;然后通过遍历图像的像素值,在对应的vector位置上自加,实现统计,后续可以将统计结果通过直方图显示。
	//统计灰度图像
	vector<int> hist(256);
	for (int i = 0; i < 256; i++) {
		hist[i] = 0;
	}
	for (int row = 0; row < height; row++) {
		for (int col = 0; col < width; col++) {
			int pv = img.at<uchar>(row, col);
			hist[pv]++;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值