图像像素的算数操作
对各个像素点实现加减乘除的操作
介绍了常用的除爆函数saturate_cast,防止数值过界。
完整代码
void QuickDemo::operators_demo(Mat &image) {
Mat dst = Mat::zeros(image.size(), image.type());
Mat dst2 = Mat::zeros(image.size(), image.type());
Mat dst3 = Mat::zeros(image.size(), image.type());
Mat dst4 = Mat::zeros(image.size(), image.type());
Mat m = Mat::zeros(image.size(), image.type());
m = Scalar(5, 5, 5);
// 加法
/*
int w = image.cols;
int h = image.rows;
int dims = image.channels();
for (int row = 0; row < h; row++) {
for (int col = 0; col < w; col++) {
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]);
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]);
}
}
*/
add(image, m, dst);
subtract(image, m, dst2);
multiply(image, m, dst3);
divide(image, m, dst4);
imshow("加法操作", dst);
imshow("减法操作", dst2);
imshow("乘法操作", dst3);
imshow("除法操作", dst4);
}