zoukankan      html  css  js  c++  java
  • OpenCV 学习笔记(4)OpenCV遍历彩色图像、灰度图像的像素值方法

    https://blog.csdn.net/mooneve/article/details/53001677

    应用:将彩色图像转为灰度图像输出

    方法一 使用ptr函数和指针 (高效)

    void main()
    {
    	//读入彩色图像
    	Mat img = imread("fruits.jpg");
    	imshow("原图", img);
    	int rows = img.rows;
    	int cols = img.cols;
    	//生成和img同样大小的空白灰度图像
    	Mat grayImg = Mat(rows, cols, CV_8U);
    	for (int i = 0; i < rows; i++)
    	{
    		//获取图像每一行的首地址
    		Vec3b *p = img.ptr<Vec3b>(i);//彩色图                      //p指向地址
    		uchar *p2 = grayImg.ptr<uchar>(i);//灰度图                 //*p指向内容
    		for (int j = 0; j < cols; j++)
    		{
    			//每次迭代获取图像列的地址
    			Vec3b &pix = *p++;//彩色图                             //pix指向内容
    			uchar &pix2 = *p2++;//灰度图                           //&pix指向地址
    			pix2 = pix[0] * 0.114 + pix[1] * 0.587 + pix[2] * 0.299;
    		}
    	}
    	imshow("灰度图", grayImg);
    	waitKey(0);
    }
    
    

      

    方法二 使用at<Vec3b>(i, j) 和at<uchar>(i, j)

    void main()
    {
    	//读入彩色图像
    	Mat img = imread("fruits.jpg");
    	imshow("原图", img);
    	int rows = img.rows;
    	int cols = img.cols;
    	//生成和img同样大小的空白灰度图像
    	Mat grayImg = Mat(rows, cols, CV_8U);
    	for (int i = 0; i < rows; i++)
    	{
    		for (int j = 0; j < cols; j++)
    		{
    			//彩色图像获取到单个像素
    			Vec3b pix = img.at<Vec3b>(i,j);
    			//获取到RGB分量的值。
    			uchar B = pix[0];
    			uchar G = pix[1];
    			uchar R = pix[2];
    			//或者使用下面的方法
    			//uchar B = img.at<Vec3b>(i, j)[0];
    			//uchar G = img.at<Vec3b>(i, j)[1];
    			//uchar G = img.at<Vec3b>(i, j)[2];
    			//计算灰度值,然后赋值给灰度图中的像素
    			grayImg.at<uchar>(i,j) = R * 0.299 + G * 0.587 + B * 0.114;//灰度著名心理学公式
    		}
    	}
    	imshow("灰度图", grayImg);
    	waitKey(0);
    }
    

      

  • 相关阅读:
    二分查找
    「数学」二次函数中项系数大小与图像的关系
    「数学」夹角公式
    「CF80A」Panoramix's Prediction
    「Luogu P6101」[EER2]出言不逊
    「数学」三角函数公式以及部分证明
    「Luogu P6069」[MdOI2020] Group
    「CF80B」Depression
    「数学」Menelaus定理与Ceva定理
    「AT1175」ニコニコ文字列
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/10533730.html
Copyright © 2011-2022 走看看