欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Opencv3学习笔记(4)之像素定位与颜色缩减

程序员文章站 2022-07-07 13:38:54
...

1、颜色缩减算法公式:

Opencv3学习笔记(4)之像素定位与颜色缩减

注意Opencv3学习笔记(4)之像素定位与颜色缩减是uchar类型(0~255)的, 因为uchar除int型仍为uchar型,因此Opencv3学习笔记(4)之像素定位与颜色缩减 取得是余数。

2、灰度图像取像素点:Image.at(i,j)

彩色图像:1)蓝色通道 :Image.at<Vec3b>(i,j)[0]

                    2)   绿色通道 : Image.at<Vec3b>(i,j)[1]

                    3)   红色通道 : Image.at<Vec3b>(i,j)[2]

程序实例:

编程注意要点:1)全局函数声明之后,子函数的位置可随意,否则必须要放在主函数的前面。2)Vs里面双引号的应用要注意。

#include "stdafx.h"
#include "highgui.h"
#include "cv.h"
using namespace std;
using namespace cv;

// vs头文件定义要用双引号
void colorReduce(Mat &srcImage, Mat &dstImage, int div);

//全局函数声明之后,子函数的位置可随意,未声明必须在前面;
//主函数
int main()
{
	Mat srcImage = imread("E:/学习资料/VS2013程序/lena.jpg");
	imshow("原图像",srcImage);
	Mat dstImage;
	dstImage.create(srcImage.rows,srcImage.cols,srcImage.type());
	double time0 = static_cast<double>(getTickCount());
	colorReduce(srcImage,dstImage,32);
	time0 = ((double)getTickCount() - time0) / getTickFrequency();
	cout << "此方法运行的时间是:" << time0 <<"秒"<< endl;
	imshow("效果图",dstImage);
	waitKey();
}
/*
void colorReduce(Mat &inputImage, Mat &outImage, int div)
{
	inputImage.copyTo(outImage);
	int rowNumber = outImage.rows;
	int colNumber = outImage.cols*outImage.channels();
	for (int i = 0; i < rowNumber; i++)
	{
		uchar* data = outImage.ptr<uchar>(i);

		for (int j = 0; j <colNumber; j++)
		{
			data[j] = data[j] / div*div + div / 2;
		}
	}
}
*/
void colorReduce(Mat &inputImage, Mat &outputImage, int div)
{
	outputImage = inputImage.clone();
	int rowNumber = outputImage.rows;
	int colNumber = outputImage.cols;
	for (int i = 0; i < rowNumber; i++)
	{	
		for (int j = 0; j < colNumber; j++)
		{
			outputImage.at<Vec3b>(i, j)[0] = outputImage.at<Vec3b>(i, j)[0] / div*div ;
			outputImage.at<Vec3b>(i, j)[1] = outputImage.at<Vec3b>(i, j)[1] / div*div ;
			outputImage.at<Vec3b>(i, j)[2] = outputImage.at<Vec3b>(i, j)[2] / div*div ;
		}
	}
}

图示:

Opencv3学习笔记(4)之像素定位与颜色缩减

相关标签: 像素值定位