Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Cách giảm màu (Color Reduction) dùng Iterator Method trong OpenCV C++


Giới thiệu

OpenCV cung cấp Mat_<Vec3b>::iterator tương thích STL để duyệt pixel hiệu quả. Giảm màu bằng cách lượng tử hóa (quantization) mỗi kênh: value = value/div*div + div/2.

Chương trình giảm màu dùng Iterator

#include <iostream>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

void reducing_Color(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 main() {
    Mat image = imread("mango.jpg");
    namedWindow("Image Window");
    reducing_Color(image);
    imshow("Image Window", image);
    waitKey(0);
    return 0;
}

Kết quả

Ảnh gốc và ảnh sau giảm màu (số màu ít hơn, hiệu ứng posterize, các vùng màu phẳng hơn).