Opencv基础图像处理实验

实现功能:

        图像加载、颜色空间转换、掩膜操作(对比度增强)、像素点值修改。

实验代码:

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

using namespace cv;

int main(int argc, char** argv) {
	Mat src = imread("C:/usr/opencv-test/Testpictures/sight.jpg"); //by default
	if (src.empty())
	{
		printf("load image failed!\n");
		return -1;
	}
	namedWindow("input image", WINDOW_AUTOSIZE);
	imshow("input image", src);


	Mat dst,gray_src,gray_not;
	dst.create(src.size(),src.type());  //初始化容器大小,类型
	cvtColor(src, gray_src, CV_BGR2GRAY);  //bgr转换为灰度格式,单通道

	//Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,-1, 5, -1, 0, -1, 0);  //掩膜操作,实现对比度增强
	//filter2D(src,dst,-1,kernel);
	
	//bitwise_not(src, dst );    //反色(即255-灰度值)
	namedWindow("gray_src image", WINDOW_AUTOSIZE);
	imshow("gray_src image", gray_src);

	
	//修改像素值
	int height = src.rows;
	int width = src.cols;
	int nc = src.channels();
	for (int row = 0; row < height; row++) 
		{	
			for (int col = 0; col < width; col++)
			{
				//单通道
			    if(nc == 1 )
				{
					int gray = gray_src.at<uchar>(row, col); //获取像素值
					gray_src.at<uchar>(row, col) = 255 - gray; //像素值取反差
				}
				//三通道
				else if(nc == 3)
				{
					int b = src.at<Vec3b>(row,col)[0];
					int g = src.at<Vec3b>(row,col)[1];
					int r = src.at<Vec3b>(row,col)[2];
					dst.at<Vec3b>(row,col)[0] = b;
					dst.at<Vec3b>(row,col)[1] = g;
					dst.at<Vec3b>(row,col)[2] = 0;
				}
			}
		}
    
	//bitwise_not(src, gray_not); //像素点取反差值,等同于上面循环代码
	imshow("dst image", dst);

	waitKey(0);
	return 0;
}

实验部分效果图:

Opencv基础图像处理实验