眾所周知對于三通道圖像,,所存儲的顏色個數(shù)太多,,用如此多的顏色來進行處理,可能會對算法性能造成很大的影響,,其實,,只要使用這些顏色中具有代表性的小部分就可以達到同樣的效果。于是一般都會對圖像的顏色進行縮減,。主要的做法是將現(xiàn)有的顏色空間值除以某一個輸入值來減少顏色數(shù)量,。
主要思路為:
1、遍歷圖像矩陣的每一個像素,。
2,、對像素應用縮減的算法,。
- <strong>#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("C:\\Users\\Administrator\\Desktop\\4.jpg");//讀取的圖片
- imshow("原始圖像", srcimage);
- Mat dstimage;
- dstimage.create(srcimage.rows, srcimage.cols, srcimage.type());
- double time0 = static_cast<double>(getTickCount());
- colorReduce(srcimage, dstimage, 64);
- 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;
- }
- }
-
-
- }</strong>
原圖
對圖像縮減64倍
耗時:
縮小16倍
耗時:
|