一.单通道灰度图像处理
/*
OpenCV 图像操作学习
Michael Jiang<sencom1997@outlook.com>
2019年7月24日09:42:25
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
//读取图像
Mat src = imread("D:/go.png", IMREAD_COLOR);
//创建窗口
namedWindow("src win", WINDOW_AUTOSIZE);
namedWindow("gray win", WINDOW_AUTOSIZE);
namedWindow("reverse win", WINDOW_AUTOSIZE);
//显示原始图像
imshow("src win", src);
//BGR转gray
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
//显示gray图像
imshow("gray win", gray);
//gray图像位操作取反
Mat reverse = Mat(gray.size(),gray.type());
int higth = gray.rows;
int width = gray.cols;
for (int i = 0; i < higth; i++)
{
for (int j = 0; j < width; j++)
{
reverse.at<uchar>(i,j) = 255 - gray.at<uchar>(i,j);
}
}
//显示反转灰度图像
imshow("reverse win", reverse);
waitKey(0);
return 0;
}
二.三通道BGR图像处理
/*
OpenCV 图像操作学习
Michael Jiang<sencom1997@outlook.com>
2019年7月24日09:42:25
*/
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
int main()
{
//读取图像
Mat src = imread("D:/go.png", IMREAD_COLOR);
//创建窗口
namedWindow("src win", WINDOW_AUTOSIZE);
//namedWindow("gray win", WINDOW_AUTOSIZE);
namedWindow("reverse win", WINDOW_AUTOSIZE);
//显示原始图像
imshow("src win", src);
//BGR图像反转
Mat reverse = Mat(src.size(), src.type());
int higth = src.rows;
int width = src.cols;
for (int i = 0; i < higth; i++)
{
for (int j = 0; j < width; j++)
{
reverse.at<Vec3b>(i, j)[0] = 255 - src.at<Vec3b>(i, j)[0];
reverse.at<Vec3b>(i, j)[1] = 255 - src.at<Vec3b>(i, j)[1];
reverse.at<Vec3b>(i, j)[2] = 255 - src.at<Vec3b>(i, j)[2];
}
}
//显示反转灰度图像
imshow("reverse win", reverse);
/*
//BGR转gray
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
//显示gray图像
imshow("gray win", gray);
//gray图像位操作取反
Mat reverse = Mat(gray.size(),gray.type());
int higth = gray.rows;
int width = gray.cols;
for (int i = 0; i < higth; i++)
{
for (int j = 0; j < width; j++)
{
reverse.at<uchar>(i,j) = 255 - gray.at<uchar>(i,j);
}
}
//显示反转灰度图像
imshow("reverse win", reverse);
*/
waitKey(0);
return 0;
}
三.小记
1.在三通道转换时可以设置某一通道或者某两个通道的值为0,可以出现一些意想不到的特效
reverse.at<Vec3b>(i, j)[2] = 0;//将RED通道设置为0
2.取三个通道中的最大值作为单通道图像的值可以将BGR图像转为亮度较大的GRAY图像;相反如果去三个通道中最小的值的话,得到的就是亮度较暗的GRAY图像。
Amazing!