// ColorReduce.cpp : Defines the entry point for the console application.
/*-----CODE FOR FUN---------------
-------CREATED BY Dream_Whui------
-------2015-3-9-------------------------*/
//颜色缩减
#include "stdafx.h"
#include <iostream>
#include<opencv2\opencv.hpp>
using namespace cv;
using namespace std;
void ColorReduce(Mat &image, int div=64)
{
int nl = image.rows;//行数
int nc = image.cols * image.channels();
for(int j=0; j<nl; j++)
{
uchar *data = image.ptr<uchar>(j);
for(int i=0; i<nc; i++)
data[i] = data[i] /div *div + div/2;
}
}
void ColorReduce_itor(Mat &image, int div=64)
{
Mat_<Vec3b>:: iterator it = image.begin<Vec3b>();
Mat_<Vec3b>:: iterator itend = image.end<Vec3b>();
for( ;it != itend; it++)
{
(*it)[0] = (*it)[0] / div * div +div /2;
(*it)[1] = (*it)[1] / div * div +div /2;
(*it)[2] = (*it)[2] / div * div +div /2;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Mat image = imread("pic.jpg");
Mat image_1 = image.clone();
namedWindow("image_raw");
imshow("image_raw",image);
double duration;
duration = static_cast<double>(getTickCount());
ColorReduce(image,64);
duration = static_cast<double>(getTickCount()) - duration;
duration /= getTickFrequency();
cout<<"指针耗费时间:"<<duration<<endl;
namedWindow("image");
imshow("image",image);
duration = static_cast<double>(getTickCount());
ColorReduce_itor(image_1,64);
duration = static_cast<double>(getTickCount()) - duration;
duration /= getTickFrequency();
cout<<"迭代器耗费时间:"<<duration<<endl;
namedWindow("image_itor");
imshow("image_itor",image_1);
waitKey();
return 0;
}Opencv2--颜色缩减(两种方法实现 1.迭代器 2.指针)
最新推荐文章于 2021-11-27 19:49:45 发布
本文探讨了颜色缩减算法在图像处理中的应用,通过对比两种方法的效率,并提供了实际的C++实现代码。
2049

被折叠的 条评论
为什么被折叠?



