首页 > 其他 > 详细

RGB图像灰度化

时间:2020-03-30 17:11:16      阅读:69      评论:0      收藏:0      [点我收藏+]
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
using namespace cv;
using namespace std;

const int BGR_TO_GRAY_AVERAGING_SHIFT = 8;
const int BGR_TO_GRAY_ROUND_TERM = 1 << (BGR_TO_GRAY_AVERAGING_SHIFT - 1);
const int BLUE_TO_GRAY_WEIGHT = int(0.114*(1 << BGR_TO_GRAY_AVERAGING_SHIFT) + 0.5);
const int GREEN_TO_GRAY_WEIGHT = int(0.587*(1 << BGR_TO_GRAY_AVERAGING_SHIFT) + 0.5);
const int RED_TO_GRAY_WEIGHT = 255 - BLUE_TO_GRAY_WEIGHT - GREEN_TO_GRAY_WEIGHT;
void RGB2Y(unsigned char *Src, unsigned char *Dest, int Width, int Height, int Stride);

inline const unsigned char BgrToGray(int blue, int green, int red)
{
	return (BLUE_TO_GRAY_WEIGHT*blue + GREEN_TO_GRAY_WEIGHT * green +
		RED_TO_GRAY_WEIGHT * red ) >> BGR_TO_GRAY_AVERAGING_SHIFT;
}

void BgraToGray(const unsigned char * bgra, size_t width, size_t height, size_t bgraStride, unsigned char * gray, size_t grayStride) { for (size_t row = 0; row < height; ++row) { const unsigned char * pBgra = bgra + row*bgraStride; unsigned char * pGray = gray + row*grayStride; for (const uint8_t *pGrayEnd = pGray + width; pGray < pGrayEnd; pGray += 1, pBgra += 3) { *pGray = BgrToGray(pBgra[0], pBgra[1], pBgra[2]); } } } int main(int argc, char** argv) { Mat src = imread("C:/Users/lvmeng/Desktop/Image/hua.jpg", 1); int Height = src.rows; int Width = src.cols; unsigned char *Src = src.data; unsigned char *Dest = new unsigned char[Height * Width]; int64 st = cvGetTickCount(); BgraToGray(Src, Width, Height, Width * 3, Dest, Width); double duration = 1000*((cv::getTickCount() - st) / cv::getTickFrequency() ) ; printf("%.5f\n", duration); Mat dst(Height, Width, CV_8UC1, Dest); imshow("aaaaaa", dst); cvWaitKey(0); system("pause"); return 0; }

  RGB图像灰度化,很简单的代码,原理也很简单,没必要多解释!!!

RGB图像灰度化

原文:https://www.cnblogs.com/almn/p/12599427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!