openCV Jia Zhigang teacher video learning -2

table of Contents

Acquiring an image pixel pointer

Range pixel processing saturate_cast

Masking operation to achieve image contrast adjustment

Function calls filter2D function

Exercise program


Acquiring an image pixel pointer

CV_Assert(myImage.depth() == CV_8U);

Mat.ptr <uchar> (int i = 0) of the pixel matrix acquired pointers, index i denotes the first few lines, the line count from zero.

Obtaining a current row pointer const uchar * current = myImage.ptr <uchar> (row);

Get the current pixel P (row, col) of the pixel value p (row, col) = current [col]

Processing pixel range saturate_cast <uchar>

saturate_cast <uchar> (- 100), returns 0.

saturate_cast <uchar> (288), or 255

saturate_cast <uchar> (100), returned 100

Of this function is to ensure that the RGB worth range between 0 to 255

Masking operation to achieve image contrast adjustment

Red is the center pixel, from top to bottom, left to right to do the same for each pixel processing operation, the final result is an output image after the object contrast improvement Mat

 

 

Function calls filter2D function

Defined mask:

Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);

filter2D( src, dst, src.depth(), kernel );

Wherein src and dst are Mat type variable,

src.depth bitmaps representing depth, there 32,24,8 like.

Exercise program

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;

int main(int argc, char** argv) {
	Mat src, dst;
	src = imread("D:/vcprojects/images/test.png");
	if (!src.data) {
		printf("could not load image...\n");
		return -1;
	}
	namedWindow("input image", CV_WINDOW_AUTOSIZE);
	imshow("input image", src);
	
	/*
	int cols = (src.cols-1) * src.channels();
	int offsetx = src.channels();
	int rows = src.rows;

	dst = Mat::zeros(src.size(), src.type());
	for (int row = 1; row < (rows - 1); row++) {
		const uchar* previous = src.ptr<uchar>(row - 1);
		const uchar* current = src.ptr<uchar>(row);
		const uchar* next = src.ptr<uchar>(row + 1);
		uchar* output = dst.ptr<uchar>(row);
		for (int col = offsetx; col < cols; col++) {
			output[col] = saturate_cast<uchar>(5 * current[col] - (current[col- offsetx] + current[col+ offsetx] + previous[col] + next[col]));
		}
	}
	*/
	double t = getTickCount();
	Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(src, dst, src.depth(), kernel);
	double timeconsume = (getTickCount() - t) / getTickFrequency();
	printf("tim consume %.2f\n", timeconsume);

	namedWindow("contrast image demo", CV_WINDOW_AUTOSIZE);
	imshow("contrast image demo", dst);

	waitKey(0);
	return 0;
}

 

Published 11 original articles · won praise 0 · Views 275

Guess you like

Origin blog.csdn.net/weixin_41769570/article/details/104733295