600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > OpenCV-学习历程4- 读取图像/读取像素/修改像素值方法(包含灰度+rgb图像像素处理方式)

OpenCV-学习历程4- 读取图像/读取像素/修改像素值方法(包含灰度+rgb图像像素处理方式)

时间:2019-03-06 04:31:56

相关推荐

OpenCV-学习历程4- 读取图像/读取像素/修改像素值方法(包含灰度+rgb图像像素处理方式)

OPENCV系列博客主要记录自己学习OPENCV的历程,以及存储已经实现的代码,以备后续回顾使用,代码中包含了主要的备注。

#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(int argc, char**argv) {//Step1 读取图片Mat src;src = imread("sample.jpg");if (src.empty()) {cout << "The image is empty,plz check the file route..." << endl;return -1;}namedWindow("Original_image", CV_WINDOW_AUTOSIZE);imshow("Original_image", src);//Step2 将图片转化为灰度图,读取像素灰度值,并遍历反转全部像素颜色//注意:这一部分是对单通道进行操作Mat gray_src;cvtColor(src,gray_src,CV_BGR2GRAY);namedWindow("Gray_image", CV_WINDOW_AUTOSIZE);imshow("Gray_image", gray_src);int height = gray_src.rows;int width = gray_src.cols;for (int row = 0; row < height; row++) {for (int colomn = 0; colomn < width; colomn++) {int gray = gray_src.at<uchar>(row, colomn); //!!重要,使用这个语句取出图像像素灰度gray_src.at<uchar>(row, colomn)=255 - gray; //!!可以通过这个语句,修改每个像素的灰度值}}namedWindow("Gray_image_inverse", CV_WINDOW_AUTOSIZE);imshow("Gray_image_inverse", gray_src);//Step3 遍历图片,对RGB三通道彩色图片进行反转//原理类似,注意遍历时候的数据类型Mat dst;dst.create(src.size(),src.type());height = src.rows;width = src.cols;int nc = src.channels();for (int row = 0; row < height; row++) {for (int colomn = 0; colomn < width; colomn++) {if (nc ==1 ) {int gray_2 = gray_src.at<uchar>(row, colomn); //!!重要,使用这个语句取出图像像素灰度gray_src.at<uchar>(row, colomn) = 255 - gray_2; //!!可以通过这个语句,修改每个像素的灰度值}else if (nc == 3) {int b = src.at<Vec3b>(row, colomn)[0];//!!重要:彩色图3个通道,每个行列对应的是一个数组,数组包含bgr三原色int g = src.at<Vec3b>(row, colomn)[1];int r = src.at<Vec3b>(row, colomn)[2];dst.at<Vec3b>(row, colomn)[0] = 255 - b;dst.at<Vec3b>(row, colomn)[1] = 255 - g;dst.at<Vec3b>(row, colomn)[2] = 255 - r; //此处除了取反之外,可以设定其他数值,达到不同效果}}}//bitwise_not(src, dst); //使用这个语句可以按位取反,得到与上边同样效果namedWindow("Color_image_inverse", CV_WINDOW_AUTOSIZE);imshow("Color_image_inverse", dst);waitKey();return 0;}

效果如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。