OpenCV4.0入门(5)图像像素算数操作

知识点:

saturate_cast防止数据溢出

 

#ifndef DAY05
#define DAY05

#include 
#include 

using namespace std;
using namespace cv;

void day05() {

	Mat src = imread("G:\\opencvTest\\test.jpg");
	if (src.empty()) {
		cout << "could not load image1.." << endl;
		return;
	}

	Mat src2 = imread("G:\\opencvTest\\test_gray.jpg");
	if (src2.empty()) {
		cout << "could not load image2.." << endl;
		return;
	}

	
	int height = src.rows;
	int width = src.cols;
	int ch = src.channels();

	// 指针读取
	Mat result = Mat::zeros(src.size(), src.type());
	int blue = 0, green = 0, red = 0;
	for (int row = 0; row < height; row++) {
		uchar* src_row = src.ptr(row);
		uchar* src2_row = src2.ptr(row);
		uchar* result_row = result.ptr(row);

		for (int col = 0; col < width * ch; col++) {
			// 有溢出保护
			result_row[col] = saturate_cast(src_row[col] * 0.5 + src2_row[col] * 0.5 - 100);
			
			// 没有溢出保护
			//result_row[col] = (src_row[col] * 0.5 + src2_row[col] * 0.5 - 100);
		}
	}
	imshow("result", result);

	waitKey(0);
}

#endif // !DAY05

 

有溢出保护的结果

OpenCV4.0入门(5)图像像素算数操作_第1张图片

 

没有溢出保护的结果

OpenCV4.0入门(5)图像像素算数操作_第2张图片

惨不忍睹~~

你可能感兴趣的:(OpenCV4.0)