Opencv2--颜色缩减(两种方法实现 1.迭代器 2.指针)

本文探讨了颜色缩减算法在图像处理中的应用,通过对比两种方法的效率,并提供了实际的C++实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

// 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值