// 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.指針)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.