學習c++版opencv3.4之5
阿新 • • 發佈:2018-12-11
對影象操作:
1.讀寫影象,imread,imwrite
2.獲取畫素,單通道:img.at<uchar>(i, j),獲取3通道的一個通道值:img.at<Vec3b>(i, j)[0]
3.修改畫素,對img.at<uchar>(i, j)直接賦值即可。
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main(){ Mat src; src = imread("/Users/ming/Documents/test.jpg"); if (! src.data){ printf("cannot load image..."); } namedWindow("src img", CV_WINDOW_AUTOSIZE); imshow("src img", src); /* 3通道影象,獲取和改變畫素值src.at<Vec3b>(i,j)[0] */ Mat color_img; color_img.create(src.size(), src.type()); int height = color_img.rows; int width = color_img.cols; int channel = color_img.channels(); for (int i=0; i<height; i++){ for (int j=0; j<width; j++){ int b = src.at<Vec3b>(i, j)[0]; //獲取彩色影象畫素值 int g = src.at<Vec3b>(i, j)[1]; int r = src.at<Vec3b>(i, j)[2]; color_img.at<Vec3b>(i, j)[0] = 255 - b; color_img.at<Vec3b>(i, j)[1] = 255 - g; color_img.at<Vec3b>(i, j)[2] = 255 - r; } } namedWindow("255-color img", CV_WINDOW_AUTOSIZE); imshow("255-color img", color_img); Mat gray; cvtColor(src, gray, CV_BGR2GRAY); namedWindow("gray img", CV_WINDOW_AUTOSIZE); imshow("gray img", gray); /* 單通道影象,獲取和修改畫素值src.at<uchar>(i,j) */ height = gray.rows; width = gray.cols; for (int i=0; i<height; i++){ for (int j=0; j<width; j++){ int gray_pixel = gray.at<uchar>(i, j); //獲取灰度影象畫素值 gray.at<uchar>(i, j) = 255 - gray_pixel; } } namedWindow("255-gray img", CV_WINDOW_AUTOSIZE); imshow("255-gray img", gray); waitKey(0); }