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;
}
实验部分效果图: