編程實現灰度處理函數

 新版本的OpenCV中,習慣於用Mat處理,而一般學習之初,用舊版本的寫法比較多(IplImage)。突然間,遇到這樣的問題,需要用新的版本實現圖像灰度化處理,發現需要訪問圖像矩陣的數據元素。要找到舊版本的實例比較多,實現的方法介紹也比較多(方法可以參考http://blog.csdn.net/likezhaobin/article/details/6915754)。本帖只實現其中一種方法,其餘的方法, 修改少量代碼就行。

    具體代碼如下:

[html] view plain copy
  1. #include "stdafx.h"  
  2. #include <iostream>  
  3. #include "opencv2/opencv.hpp"  
  4. #include "opencv/cv.h"  
  5.   
  6. using namespace std;  
  7. using namespace cv;  
  8.   
  9. void cvtCOLOR(Mat src, Mat dst)  
  10. {  
  11.     float R, G, B;  
  12.     for (int y = 0; y < src.rows; y++)  
  13.     {  
  14.         uchar* data = dst.ptr<uchar>(y);  
  15.         for (int x = 0; x < src.cols; x++)  
  16.         {  
  17.             B = src.at<Vec3b>(y, x)[0];  
  18.             G = src.at<Vec3b>(y, x)[1];  
  19.             R = src.at<Vec3b>(y, x)[2];  
  20.             data[x] = (int)(R * 0.299 + G * 0.587 + B * 0.114);//利用公式計算灰度值(加權平均法)  
  21.         }  
  22.     }  
  23. }  
  24.   
  25. int main()  
  26. {  
  27.     Mat src = imread("1.jpg", 1);  
  28.     Mat dst(src.rows, src.cols, CV_8UC1);//大小與原圖相同的八位單通道圖  
  29.     cvtCOLOR(src, dst);  
  30.     imshow("原始圖", src);  
  31.     imshow("灰度圖", dst);  
  32.     waitKey(0);  
  33.     return 0;  
  34. }  

    效果如下圖所示:



1
發佈了8 篇原創文章 · 獲贊 18 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章