1. 程式人生 > >OpenCV學習第三篇:圖片的掩膜操作(實現影象的對比度調整)

OpenCV學習第三篇:圖片的掩膜操作(實現影象的對比度調整)

掩膜操作實現影象的對比度調整
矩陣的掩膜操作十分簡單,根據掩膜來重新計算每個畫素的畫素值,掩膜(mask也被稱為kernel)
I(i,j) = 5* I(i,j)-[I(i-1,j)+I(i+1,j)+I(i,j-1)+I(i,j+1)]

這裡寫圖片描述
我們的核心思想是對圖片中的每個畫素都做此操作,就是進行上面的公式!
—–分解形式
這裡寫圖片描述
—–使用內建掩膜函式
這裡寫圖片描述
利用getTickCount()函式來獲取當前時間, double timeconsume = (getTickCount() - t) / getTickFrequency();計算當前消耗時間!
以下是完整程式碼:

#include <opencv2/opencv.hpp>
#include <iostream> #include <math.h> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat src, drc; src = imread("F:/識圖/645-140GG51042.JPG"); if (src.empty()) { cout << "could not image loading......" << endl; return -1
; } //src.cols圖形的寬度,src.channels圖形的通道數 int cols = src.cols * src.channels(); int offsetx = src.channels();//多通道 //高度 int rows = src.rows; //初始化目標物件,zeros代表和原影象一樣 drc = Mat::zeros(src.size(), src.type()); //for (int row = 1; row< rows-1; row++) //{ // //算行的畫素 // const uchar* current = src.ptr<uchar>(row-1);//當前的指標所代表的畫素
// const uchar* previous = src.ptr<uchar>(row);//前一幀所代表的畫素 // const uchar* next = src.ptr<uchar>(row+1);//下一幀所代表的畫素 // uchar* output = drc.ptr<uchar>(row);//目標物件畫素 // for (int col = 0; col < cols; col++) // { // //算列的畫素 // //帶入目標公式current[col - offsetx]代表前一個current[col + offsetx]後面一個previous[col]正對著next[col]正對著(正對著代表列一樣),同理前面的列不一樣 // // saturate_cast<uchar>函式代表把畫素範圍控制在0-255之內 // output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col])); // } //} //定義掩膜 Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //獲取當前時間 double t = getTickCount(); filter2D(src, drc, src.depth(), kernel); //計算消耗時間 double timeconsume = (getTickCount() - t) / getTickFrequency(); cout << "timeScale:" << endl << timeconsume << endl; namedWindow("BUTAFUIL GRIL", CV_WINDOW_AUTOSIZE); imshow("BUTAFUIL GRIL", src); imshow("GOOD GRIL", drc); waitKey(0); return 0; }

這裡是列印結果:
這裡寫圖片描述
美女是不是很漂亮嘿嘿,這樣才有敲程式碼的動力啊!一起學習的群號(601408323),有理想的童鞋一起來啊,歡迎!!