05-图像操作
代码说明
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(char argc, char** argv)
{
Mat myImage = imread("women.jpg", 1);
if (!myImage.data)
{
cout << "couldn't load image..." << endl;
return -1;
}
namedWindow("input", WINDOW_NORMAL);
imshow("input", myImage);
//bgr转换为gray
//Mat image_gray;
//cvtColor(myImage, image_gray, COLOR_BGR2GRAY);
//namedWindow("GRAY", WINDOW_AUTOSIZE);
//imshow("GRAY", image_gray);
//求反差
Mat output;
output.create(myImage.size(), myImage.type());
int height = myImage.rows;
int width = myImage.cols;
int nc = myImage.channels();
Mat gray_image(myImage.size(), CV_8UC1);
for (int row = 0; row < height; row++)
{
for (int col = 0; col < width; col++)
{
if (nc == 1)
{
int gray = myImage.at<uchar>(row, col);
myImage.at<uchar>(row, col) = 255 - gray;
}
else if (nc == 3)
{
int b = myImage.at<Vec3b>(row, col)[0];
int g = myImage.at<Vec3b>(row, col)[1];
int r = myImage.at<Vec3b>(row, col)[2];
output.at<Vec3b>(row, col)[0] = 255 - b;
output.at<Vec3b>(row, col)[1] = 255 - g;
output.at<Vec3b>(row, col)[2] = 255 - r;
//自己些代码求灰度图片(用bgr的最大值赋值给gray)
gray_image.at<uchar>(row, col) = max(b, max(g, r));
}
}
}
//以上求反等价于:
//bitwise_not(myImage, output);
namedWindow("output", WINDOW_NORMAL);
imshow("output", output);
namedWindow("GRAY", WINDOW_NORMAL);
imshow("GRAY", gray_image);
waitKey(0);
return 0;
}
备注:以上内容转载笔者早期OneNote笔记,较多为图片格式,比较简陋。
后记:笔者才疏学浅,如有错误,望指出。