OpenCv学习0807

本文主要探讨OpenCV中的Mat对象的创建与赋值方法,详细讲解如何遍历图像像素,并介绍了一些基本的图像像素算术操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mat的创建与赋值

    //拷贝
	Mat m1, m2;
	m1 = image.clone();
	image.copyTo(m2);

	//创建空白图像
	Mat m3 = Mat::zeros(Size(8, 8), CV_8UC1);

遍历像素

int w = image.cols;//宽度
	int h = image.rows;//高度
	int dims = image.channels();//通道数
	for (int row = 0; row < h; row++) {
		uchar* current_row = image.ptr<uchar>(row);
		for (int col = 0; col < w; col++) {
			if (dims == 1) {
				//单通道,即灰度图
				//int pv = image.at<uchar>(row, col);//获取像素值
				//image.at<uchar>(row, col) = 255 - pv;
				int pv = *current_row;
				*current_row++ = 255 - pv;
			}
			else if (dims == 3) {
				//彩色图
				Vec3b bgr = image.at<uchar>(row, col);
				//image.at<Vec3b>(row, col)[0] = 255 - bgr[0];
				//image.at<Vec3b>(row, col)[1] = 255 - bgr[1];
				//image.at<Vec3b>(row, col)[2] = 255 - bgr[2];
				*current_row++ = 255 - *current_row;
				*current_row++ = 255 - *current_row;
				*current_row++ = 255 - *current_row;

			}
		}

图像像素的算术操作

saturate_cast<uchar>(xxxxxxx)
xxxxxxx为算术表达式
这个函数的功能是,将计算结果限定在0-255内,若结果小于0,则得0,若结果大于255,则为255,若在0-255之间,则输出正确的值
void Demo::operators_demo(Mat &image) {
	Mat dst;
	dst = image + Scalar(100,100,100);
	imshow("算术操作", dst);
	//公式(x1,x2为两个操作图片,x3为输出图片)
	//add(x1, x2, x3);
	//subtract(x1, x2, x3);
	//divide(x1, x2, x3);
	//multiply(x1, x2, x3);

	//乘法
	Mat m = Mat::zeros(image.size(), image.type());
	m = Scalar(2,2,2);
	multiply(image, m, dst);
	imshow("mul", dst);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值