If you don't need the power of kmeans or pyrMeanShiftFiltering, the openCV2 computer vision application programming cookbook introduce a simple algorithm which could reduce the color of the images.I do some refinemet to the codes(use cv::LUT to replace hand made loop).
#include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/highgui/highgui.hpp> void color_reduce(cv::Mat &input, cv::Mat &output, size_t div) { if(input.data != output.data){ output.create(input.size(), input.type()); } uchar buffer[256]; for(size_t i = 0; i != 256; ++i){ buffer[i] = i / div * div + div / 2; } cv::Mat table(1, 256, CV_8U, buffer, sizeof(buffer)); cv::LUT(input, table, output); } int main() { cv::Mat src = cv::imread("/Users/Qt/program/blogsCodes" "/pic/perspective08.jpg"); if (src.empty()){ std::cerr<<"can't open image"<<std::endl; return - 1; } cv::Mat output; color_reduce(src, output, 64); cv::imshow("result", output); cv::imshow("src", src); cv::waitKey(); return 0; }
original |
after quantize |
The codes can download from github.
No comments:
Post a Comment