1. 程式人生 > >學習c++版opencv3.4之5

學習c++版opencv3.4之5

對影象操作:

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);
    
}