图像像素的算数操作-5

一、代码部分

(1)头文件中声明函数

#pragma once
#include<opencv2/opencv.hpp>

using namespace cv;

class QuickDemo
{
public:
	void colorSpace_Demo(Mat& image);
	void mat_creation_demo(Mat& image);
	void pixel_visit_demo(Mat& image);
	void operators_demo(Mat& image); // 本次声明函数

};

 (2)quickdemo.cpp中添加函数

// 图像像素的算术操作
void QuickDemo::operators_demo(Mat& image)
{
	Mat dst = Mat::zeros(image.size(), image.type());;
	//dst = image + Scalar(50, 50, 50); 
	//dst = image - Scalar(50, 50, 50);
	//dst = image/Scalar(2, 2, 2);
	//dst = image * 2; // 可执行
	// dst = image*Scalar(2, 2, 2); // 报错 
	// 特殊函数乘法
	Mat m = Mat::zeros(image.size(), image.type());
	m = Scalar(50, 50, 50);
	// multiply(image, m, dst); // 可执行

	 // 加法
	int width = image.cols;
	int height = image.rows;
	int dims = image.channels();

	for (int row = 0; row < height; row++)
	{
		for (int col = 0; col < width; col++)
		{
			// 灰度图
			if (dims == 1)
			{
				int pv = image.at<uchar>(row, col); // 每个像素值是字节类型的,强制转换成整形,uchar范围是(0,255),也就是每个像素的范围
				image.at<uchar>(row, col) = 255 - pv; // 255减,还在255范围内 取反,灰度图会黑白相反
			}
			// 彩色图
			if (dims == 3)
			{
				Vec3b p1 = image.at<Vec3b>(row, col); // 基于数组下标
				Vec3b p2 = m.at<Vec3b>(row, col);
				dst.at<Vec3b>(row,col)[0] = saturate_cast<uchar>(p1[0] +p2[0]); // 做范围判定是否在uchar范围内,限制在0-255区间内
				dst.at<Vec3b>(row,col)[1] = saturate_cast<uchar>(p1[1] + p2[1]);
				dst.at<Vec3b>(row,col)[2] = saturate_cast<uchar>(p1[2] + p2[2]);
			}

		}
	}

	// 调用API
	// add(image, m, dst);
	// subtract(image, m, dst);
	// divide(image, m, dst);




	imshow("sub", dst);

}

(3)main函数中添加mat_creation_demo 

#include<opencv2\opencv.hpp>
#include<iostream>
#include<quickopencv.h>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
	
	Mat src = imread("D:\\Deeyea\\Learning\\peace.jpg"); // 8位,通道为B G R
	if (src.empty())
	{
		printf("无法加载图片\n");
	}
	//namedWindow("show", WINDOW_FREERATIO);
	
	imshow("image", src);

	QuickDemo qd;// 创建对象
	qd.operators_demo(src); // 图像对象的创建与赋值
	waitKey(0); 
	destroyAllWindows;
	return 0;
}

 

 结果如下图所示:

相关参考:

(1)OpenCV 中的 Scalar 类、Vec类_yleavesw的博客-CSDN博客

(2)opencv中的Scalar()函数_一叶孤舟渡的博客-CSDN博客_opencv scalar

(3)OpenCV学习笔记(3)——Scalar数据类型理解_Lavi_qq_2910138025的博客-CSDN博客_scalar(4)【opencv4.3.0教程】06之基础结构3之Scalar_结构详解_水亦心的博客-CSDN博客_scalar_t

  (5) Opencv之<Vec3b>是什么东东_五仁月饼哭了的博客-CSDN博客_opencv中vec3b

(6)OpenCV中的Vec3b、Vec2i、Vec3f等是什么意思?_昊虹AI笔记的博客-CSDN博客_opencv vec3b

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值