编程实现灰度处理函数

 新版本的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值