案例程序:颜色缩减
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
void colorReduce(Mat& inputImage,Mat& outputImage,int div);
int main()
{
Mat img = imread("flower.jpg");
if (img.empty())
{
cout << "图像载入失败!" << endl;
return -1;
}
imshow("原图", img);
Mat dstImage;
dstImage.create(img.size(),img.type());
//开始时间
double time0 = static_cast<double>(getTickCount());
colorReduce(img, dstImage, 32);
double time = ((double)getTickCount() - time0) / getTickFrequency();
cout << "此方法运行的时间:" << time << "s" << endl;
//显示效果图
imshow("效果图", dstImage);
waitKey(0);
return 0;
}
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 + div / 2; //蓝色通道
outputImage.at<Vec3b>(i, j)[1] = outputImage.at<Vec3b>(i, j)[1] / div * div + div / 2; //绿色通道
outputImage.at<Vec3b>(i, j)[2] = outputImage.at<Vec3b>(i, j)[2] / div * div + div / 2; //红色通道
}
}
}