用指针访问像素
#include "opencv2\core\core.hpp" #include "opencv2\highgui\highgui.hpp" #include <iostream> using namespace std; using namespace cv; void colorReduce(Mat& inputImage, Mat& outputImage, int div); int main() { //创建原始图并显示 Mat srcImage = imread("girl.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(0); } //使用指针访问像素 void colorReduce(Mat& inputImage, Mat& outputImage, int div) { outputImage = inputImage.clone();//复制实参到临时变量 int rowNumber = outputImage.rows;//行数 int colNumber = outputImage.cols*outputImage.channels();//列数×通道数=每一行元素的个数 //双重循环,遍历所有的像素值 for (int i = 0; i < rowNumber; i++)//行循环 { uchar* data = outputImage.ptr<uchar>(i); for (int j = 0; j < colNumber; j++) { data[j] = data[j] / div * div + div / 2; } } }