GVKun编程网logo

Python-查找图像中的主要/最常见颜色(python 图像查找)

27

如果您想了解Python-查找图像中的主要/最常见颜色的相关知识,那么本文是一篇不可错过的文章,我们将对python图像查找进行全面详尽的解释,并且为您提供关于c–如何在OpenCV中查找图像中的轮廓

如果您想了解Python-查找图像中的主要/最常见颜色的相关知识,那么本文是一篇不可错过的文章,我们将对python 图像查找进行全面详尽的解释,并且为您提供关于c – 如何在OpenCV中查找图像中的轮廓?、css – 如何从sprite图像中查找图像的像素位置、opencv模板匹配查找图像(python)、Python 2.7.x 与 Python 3.x 的主要差异的有价值的信息。

本文目录一览:

Python-查找图像中的主要/最常见颜色(python 图像查找)

Python-查找图像中的主要/最常见颜色(python 图像查找)

我正在寻找一种使用python查找图像中最主要的颜色/色调的方法。普通的阴影或最普通的RGB都可以。我看过Python
Imaging库,找不到任何与我在他们的手册中所寻找的内容有关的内容,也没有对VTK进行过简短的了解。

但是,我确实找到了可以满足我需要的PHP脚本(在此处需要登录才能下载)。该脚本似乎将图像大小调整为150*150,以显示主要颜色。但是,在那之后,我相当失落。我确实考虑过编写一些可以将图像调整为较小尺寸,然后检查其他每个像素的图像的方法,尽管我认为这样做效率不高(尽管将这种想法实现为C
python模块可能是一种想法)。

但是,尽管如此,我还是很困惑。所以,我转向你。是否有一种简单有效的方法来查找图像中的主色。

答案1

小编典典

这是使用Pillow和Scipy的cluster软件包的代码。

为简单起见,我将文件名硬编码为“
image.jpg”。调整图像大小是为了提高速度:如果您不介意等待,请注释一下调整大小调用。当在此蓝胡椒样本图像上运行时,通常会说主要颜色是#d8c865,它大致对应于两个胡椒左下角的浅黄色区域。我说“通常”是因为所使用的聚类算法具有一定程度的随机性。您可以通过多种方式更改此设置,但出于您的目的,它可能非常适合。(如果需要确定的结果,请检查kmeans2()变体上的选项。)

from __future__ import print_functionimport binasciiimport structfrom PIL import Imageimport numpy as npimport scipyimport scipy.miscimport scipy.clusterNUM_CLUSTERS = 5print(''reading image'')im = Image.open(''image.jpg'')im = im.resize((150, 150))      # optional, to reduce timear = np.asarray(im)shape = ar.shapear = ar.reshape(scipy.product(shape[:2]), shape[2]).astype(float)print(''finding clusters'')codes, dist = scipy.cluster.vq.kmeans(ar, NUM_CLUSTERS)print(''cluster centres:\n'', codes)vecs, dist = scipy.cluster.vq.vq(ar, codes)         # assign codescounts, bins = scipy.histogram(vecs, len(codes))    # count occurrencesindex_max = scipy.argmax(counts)                    # find most frequentpeak = codes[index_max]colour = binascii.hexlify(bytearray(int(c) for c in peak)).decode(''ascii'')print(''most frequent is %s (#%s)'' % (peak, colour))

注意:当我将聚类的数量从5扩展到10或15时,结果通常是绿色或蓝色。给定输入图像,这些结果也是合理的……我也无法确定哪种颜色在该图像中真正占主导地位,因此我也不会对算法提出批评!

还有一点好处:仅使用N种最常用的颜色保存缩小尺寸的图像:

# bonus: save image using only the N most common coloursimport imageioc = ar.copy()for i, code in enumerate(codes):    c[scipy.r_[scipy.where(vecs==i)],:] = codeimageio.imwrite(''clusters.png'', c.reshape(*shape).astype(np.uint8))print(''saved clustered image'')

c – 如何在OpenCV中查找图像中的轮廓?

c – 如何在OpenCV中查找图像中的轮廓?

我需要在图像中找到所有轮廓.我知道整个findcontours()和drawContours()的事情,但它使用我遇到麻烦的Canny边缘检测器.要使用查找轮廓,您需要使用canny边缘检测或阈值图像.我无法对图像进行阈值处理,因为这会导致多个边缘模糊(边缘“合并”).所以我决定使用Canny Edge检测.然而,当我使用它而不是获得完美的边缘时,我会得到各种各样的线条.这样可以防止我获得良好的轮廓.例如,我不会得到正方形的边缘,而是会得到4个由小间隙分开的单独线条,从而导致我得到4个轮廓而不是1个轮廓.我尝试过扩张,打开,关闭,高斯模糊以及基本上每个形态运算符,但这些都没有完成.有些不合并线,而有些线合并不相关的线.所以我想知道有没有人可以通过Canny Edge检测获得实际轮廓的解决方案,或者如果没有人有任何替代方法可以从图像中获取所有轮廓?

解决方法

制作斑点,然后轮廓随之而来.

总结

以上是小编为你收集整理的c – 如何在OpenCV中查找图像中的轮廓?全部内容。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。

css – 如何从sprite图像中查找图像的像素位置

css – 如何从sprite图像中查找图像的像素位置

我想知道如何在使用sprite图像进行样式时找到图像位置(坐标)。

解决方法

另一个更简单的方法是通过这个网站叫做 Sprite Cow.我刚刚尝试过,它使事情快得多。

opencv模板匹配查找图像(python)

opencv模板匹配查找图像(python)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


import cv2 as cv
import numpy as np


def main():
    # threshold 用于阈值设定匹配
    threshold = 0.9
    # 原图路径
    img_rgb_path = "./0004.jpg"
    # 模版图路径
    template_path = "./0004_t.jpg"
    # 结果图路径
    result_path = "./result.png"

    # 读取原图
    img_rgb = cv.imread(img_rgb_path)
    # 转为灰度图
    img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
    # 读取模版图
    template = cv.imread(template_path, 0)
    # 获取模版图宽高
    tpt_w, tpt_h = template.shape[::-1]

    # 列表中所有的6种比较方法
    # methods = [''cv.TM_CCOEFF'', ''cv.TM_CCOEFF_NORMED'', ''cv.TM_CCORR'',
    #         ''cv.TM_CCORR_NORMED'', ''cv.TM_SQDIFF'', ''cv.TM_SQDIFF_NORMED'']
    # 模板匹配
    res = cv.matchTemplate(img_gray, template, cv.TM_CCOEFF_NORMED)

    # 单对象模板匹配
    # min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    # 如果方法是TM_SQDIFF或TM_SQDIFF_NORMED,则取最小值
    # if method in [cv.TM_SQDIFF, cv.TM_SQDIFF_NORMED]:
    #     top_left = min_loc
    # else:
    #     top_left = max_loc

    # 多对象的模板匹配
    loc = np.where(res >= threshold)
    for pt in zip(*loc[::-1]):
        top_left = pt
        bottom_right = (top_left[0] + tpt_w, top_left[1] + tpt_h)
        # 画方框,[0,255,0] 颜色,2 线宽
        cv.rectangle(img_rgb, top_left, bottom_right, [0, 255, 0], 2)
    cv.imwrite(result_path, img_rgb)
    img_out = cv.imread(result_path)
    cv.imshow("result", img_out)
    cv.waitKey(0)
    cv.destroyAllWindows()


if __name__ == "__main__":
    main()

Python 2.7.x 与 Python 3.x 的主要差异

Python 2.7.x 与 Python 3.x 的主要差异

Python 2.7.x 与 Python 3.x 的主要差异

Python 3 初探,第 1 部分: Python 3 的新特性

我们今天的关于Python-查找图像中的主要/最常见颜色python 图像查找的分享就到这里,谢谢您的阅读,如果想了解更多关于c – 如何在OpenCV中查找图像中的轮廓?、css – 如何从sprite图像中查找图像的像素位置、opencv模板匹配查找图像(python)、Python 2.7.x 与 Python 3.x 的主要差异的相关信息,可以在本站进行搜索。

本文标签: