本系列代码托管于:https://github.com/chintsan-code/opencv4-tutorials
本篇使用的项目为:pixel_operator
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, const char** argv) {
Mat src = imread("../sample/lena512color.bmp");
if (src.empty())
{
cout << "could not load image..." << endl;
return -1;
}
imshow("src", src);
Mat dst1 = src + Scalar(50, 50, 50);
imshow("add", dst1);
Mat dst2 = src - Scalar(50, 50, 50);
imshow("sub", dst2);
Mat dst3;
multiply(src, Scalar(2, 2, 2), dst3);
imshow("mul", dst3);
Mat dst4 = src / Scalar(2, 2, 2);
imshow("div", dst4);
//另一种方式实现加法
Mat dst5 = Mat::zeros(src.size(), src.type());
for (int row = 0; row < src.rows; row++)
{
for (int col = 0; col < src.cols; col++)
{
Vec3b p1 = src.at<Vec3b>(row, col); // BGR
dst5.at<Vec3b>(row, col)[0] = saturate_cast<uchar>(p1[0] + 50);
dst5.at<Vec3b>(row, col)[1] = saturate_cast<uchar>(p1[1] + 50);
dst5.at<Vec3b>(row, col)[2] = saturate_cast<uchar>(p1[2] + 50);
}
}
imshow("add2", dst5);
waitKey(0);
destroyAllWindows();
return 0;
}
cv::multiply:计算两个图像按像素的乘积
void cv::multiply(cv::InputArray src1, cv::InputArray src2, cv::OutputArray dst, double scale = 1, int dtype = -1);
- src1、src2:输入图像
- dst:输出图像
- scale:比例因子
- dtype:输出图像的深度
cv::saturate_cast:防止溢出
例如saturate_cast<uchar>就是防止计算结果超出uchar数据范围,即大于255就输出255,小于0就输出0
cv::Mat::size():获取图像尺寸
cv::Mat::MatSize cv::Mat::size()
cv::Mat::type() :获取图像类型
int cv::Mat::type()
例如CV_8UC1、CV_8UC3等
评论 (0)