新版本的OpenCV中,習慣於用Mat處理,而一般學習之初,用舊版本的寫法比較多(IplImage)。突然間,遇到這樣的問題,需要用新的版本實現圖像灰度化處理,發現需要訪問圖像矩陣的數據元素。要找到舊版本的實例比較多,實現的方法介紹也比較多(方法可以參考http://blog.csdn.net/likezhaobin/article/details/6915754)。本帖只實現其中一種方法,其餘的方法, 修改少量代碼就行。
具體代碼如下:
- #include "stdafx.h"
- #include <iostream>
- #include "opencv2/opencv.hpp"
- #include "opencv/cv.h"
- using namespace std;
- using namespace cv;
- void cvtCOLOR(Mat src, Mat dst)
- {
- float R, G, B;
- for (int y = 0; y < src.rows; y++)
- {
- uchar* data = dst.ptr<uchar>(y);
- for (int x = 0; x < src.cols; x++)
- {
- B = src.at<Vec3b>(y, x)[0];
- G = src.at<Vec3b>(y, x)[1];
- R = src.at<Vec3b>(y, x)[2];
- data[x] = (int)(R * 0.299 + G * 0.587 + B * 0.114);//利用公式計算灰度值(加權平均法)
- }
- }
- }
- int main()
- {
- Mat src = imread("1.jpg", 1);
- Mat dst(src.rows, src.cols, CV_8UC1);//大小與原圖相同的八位單通道圖
- cvtCOLOR(src, dst);
- imshow("原始圖", src);
- imshow("灰度圖", dst);
- waitKey(0);
- return 0;
- }
效果如下圖所示:
- 頂
- 1
- 踩