最快的颜色缩减函数

来源:互联网 发布:大学生网络责任感 编辑:程序博客网 时间:2024/04/26 17:39
#include<opencv2\core\core.hpp>#include<opencv2\imgproc\imgproc.hpp>#include<opencv2\highgui\highgui.hpp>#include<iostream>using namespace std;using namespace cv;//颜色缩减函数/*void colorReduce(cv::Mat &image,int div=64){int nl=image.rows;int nc=image.cols*image.channels();//if(image.isContinuous())//{//nc=nc*nl;//nl=1;//cout<<"未填补"<<endl;//}for(int j=0;j<nl;j++){uchar* data=image.ptr<uchar>(j);for(int i=0;i<nl;i++){data[i]=data[i]/div*div+div/2;}}}void colorReduce(cv::Mat &image,int div=64){cv::Mat_<cv::Vec3b>::iterator it=image.begin<cv::Vec3b>();cv::Mat_<cv::Vec3b>::iterator itend=image.end<cv::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;}}*/void colorReduce(cv::Mat &image,int div=64){int nl=image.rows;int nc=image.cols;if(image.isContinuous()){nc=nc*nl;nl=1;cout<<"未填补"<<endl;}int n=static_cast<int>(log(static_cast<double>(div))/log(2.0));uchar mask=0xFF<<n;for(int j=0;j<nl;j++){uchar *data=image.ptr<uchar>(j);for(int i=0;i<nc;i++){*data++=*data&mask+div/2;*data++=*data&mask+div/2;*data++=*data&mask+div/2;}}}int main(){double duration;    cv::Mat image=cv::imread("d:\\test\\opencv\\img.jpg");duration=static_cast<double>(cv::getTickCount());colorReduce(image);duration=static_cast<double>(cv::getTickCount())-duration;duration/=cv::getTickFrequency();cout<<duration<<endl;cv::namedWindow("output");cv::imshow("output",image);waitKey(0);return 0;}

 


0 0
原创粉丝点击