#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <iostream>

void colorReduce(cv::Mat& image, int div=64)
{
    int nr = image.rows;    
    int nc = image.cols * image.channels();

    int n = static_cast<int>( cv::log(static_cast<double>(div)) / cv::log(2.0) );
    uchar mask = 0xFF << n;

    for(int i=0; i<nr; i++)
    {
        uchar* data = image.ptr<uchar>(i);
        for(int j=0; j<nc; j++)
        {
            //*data++ = *data - *data % div + div / 2;
            *data++ = (*data & mask) + div / 2;
        }
    }

}


int main(int argc, char** argv)
{

    cv::Mat img = cv::imread("F:\\images\\boldt.jpg");    
    cv::Mat img2 = img.clone();    

    double duration;
    duration = static_cast<double>(cv::getTickCount());

    colorReduce(img2);
    duration = static_cast<double>(cv::getTickCount()) - duration;
    duration /= cv::getTickFrequency();

    cv::namedWindow("original");    
    cv::imshow("original", img);
    cv::namedWindow("altered");    
    cv::imshow("altered", img2);

    std::cout << duration << std::endl;

    cv::waitKey(0);
    return 0;

}

 

相关文章:

  • 2022-12-23
  • 2021-04-21
  • 2021-12-13
  • 2021-08-17
  • 2022-01-15
  • 2022-12-23
  • 2021-03-30
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-21
  • 2021-07-29
  • 2021-10-08
  • 2022-12-23
  • 2021-11-03
  • 2022-12-23
相关资源
相似解决方案