如果您想了解Python-查找图像中的主要/最常见颜色的相关知识,那么本文是一篇不可错过的文章,我们将对python图像查找进行全面详尽的解释,并且为您提供关于c–如何在OpenCV中查找图像中的轮廓
如果您想了解Python-查找图像中的主要/最常见颜色的相关知识,那么本文是一篇不可错过的文章,我们将对python 图像查找进行全面详尽的解释,并且为您提供关于c – 如何在OpenCV中查找图像中的轮廓?、css – 如何从sprite图像中查找图像的像素位置、opencv模板匹配查找图像(python)、Python 2.7.x 与 Python 3.x 的主要差异的有价值的信息。
本文目录一览:- Python-查找图像中的主要/最常见颜色(python 图像查找)
- c – 如何在OpenCV中查找图像中的轮廓?
- css – 如何从sprite图像中查找图像的像素位置
- opencv模板匹配查找图像(python)
- Python 2.7.x 与 Python 3.x 的主要差异
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中查找图像中的轮廓?全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
css – 如何从sprite图像中查找图像的像素位置
解决方法
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 3 初探,第 1 部分: Python 3 的新特性
我们今天的关于Python-查找图像中的主要/最常见颜色和python 图像查找的分享就到这里,谢谢您的阅读,如果想了解更多关于c – 如何在OpenCV中查找图像中的轮廓?、css – 如何从sprite图像中查找图像的像素位置、opencv模板匹配查找图像(python)、Python 2.7.x 与 Python 3.x 的主要差异的相关信息,可以在本站进行搜索。
本文标签: