失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 图像像素的算数操作-5

图像像素的算数操作-5

时间:2020-06-23 16:56:51

相关推荐

图像像素的算数操作-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 Rif (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

如果觉得《图像像素的算数操作-5》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。