OpenCV4.0入门(4)图像像素读写操作

知识点:

C++中的像素遍历与访问

- 数组遍历

- 指针遍历

 

#ifndef DAY04
#define DAY04

#include 
#include 

using namespace std;
using namespace cv;

void day04() {

	Mat src = imread("G:\\opencvTest\\test.jpg");

	if (src.empty()) {
		cout << "could not load image.." << endl;
		return;
	}

	// 直接读取图像像素
	int height = src.rows;
	int width = src.cols;
	int ch = src.channels();
	for (int row = 0; row < height; row++) {
		for (int col = 0; col < width; col++) {
			if (ch == 3) {
				Vec3b bgr = src.at(row, col);
				bgr[0] = 255 - bgr[0];
				bgr[1] = 255 - bgr[1];
				bgr[2] = 255 - bgr[2];
				src.at(row, col) = bgr;
			}
			else if (ch == 1) {
				int gray = src.at(row, col);
				src.at(row, col) = 255 - gray;
			}
		}
	}
	imshow("output", src);

	// 指针读取
	Mat result = Mat::zeros(src.size(), src.type());
	int blue = 0, green = 0, red = 0;
	int gray;
	for (int row = 0; row < height; row++) {
		uchar* curr_row = src.ptr(row);
		uchar* result_row = result.ptr(row);
		for (int col = 0; col < width; col++) {
			if (ch == 3) {
				blue = *curr_row++;
				green = *curr_row++;
				red = *curr_row++;

				*result_row++ = blue;
				*result_row++ = green;
				*result_row++ = red;
			}
			else if (ch == 1) {
				gray = *curr_row++;
				*result_row++ = gray;
			}
		}
	}
	imshow("result", result);

	waitKey(0);
}

#endif // !DAY04

 

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