gpt4 book ai didi

image - 如何使用 OpenCV 减少图像中的颜色数量?

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:41 25 4
gpt4 key购买 nike

我有一组图像文件,我想将它们的颜色数减少到 64 种。我如何使用 OpenCV 做到这一点?

我需要这个,以便我可以使用 64 尺寸的图像直方图。我正在实现 CBIR 技术

我想要的是将颜色量化为 4 位调色板。

最佳答案

OpenCV 2 Computer Vision Application Programming Cookbook 很好地涵盖了这个主题:

第 2 章展示了一些归约操作,其中一个在此处用 C++ 进行了演示,随后在 Python 中进行了演示:

#include <iostream>
#include <vector>

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>


void colorReduce(cv::Mat& image, int div=64)
{
int nl = image.rows; // number of lines
int nc = image.cols * image.channels(); // number of elements per line

for (int j = 0; j < nl; j++)
{
// get the address of row j
uchar* data = image.ptr<uchar>(j);

for (int i = 0; i < nc; i++)
{
// process each pixel
data[i] = data[i] / div * div + div / 2;
}
}
}

int main(int argc, char* argv[])
{
// Load input image (colored, 3-channel, BGR)
cv::Mat input = cv::imread(argv[1]);
if (input.empty())
{
std::cout << "!!! Failed imread()" << std::endl;
return -1;
}

colorReduce(input);

cv::imshow("Color Reduction", input);
cv::imwrite("output.jpg", input);
cv::waitKey(0);

return 0;
}

下面您可以找到此操作的输入图像(左)和输出(右):

Python 中的等效代码如下:(归功于@eliezer-bernart)

import cv2
import numpy as np

input = cv2.imread('castle.jpg')

# colorReduce()
div = 64
quantized = input // div * div + div // 2

cv2.imwrite('output.jpg', quantized)

关于image - 如何使用 OpenCV 减少图像中的颜色数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5906693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com