我想使用Python实现以下功能的最佳方法:
- 导入图像。
- 添加一个包含n个部分的网格(如下例所示为4个部分)。
- 对于每个部分,找到其主要颜色。
期望的输出
输出一个数组、列表、字典或类似的结构,捕捉这些主要的颜色值。
甚至可以使用Matplotlib生成一个显示颜色的图表(类似像素艺术)。
我尝试过什么?
可以使用image slicer切割图像:
import image_slicerimage_slicer.slice('image_so_grid.png', 4)
然后我可能会使用这个来获取平均颜色,但我相信有更好的方法来做这件事。
使用Python实现的最佳方法是什么?
回答:
这适用于4个部分,但你需要弄清楚如何使其适用于’n’个部分:
import cv2img = cv2.imread('image.png')def fourSectionAvgColor(image): rows, cols, ch = image.shape colsMid = int(cols/2) rowsMid = int(rows/2) numSections = 4 section0 = image[0:rowsMid, 0:colsMid] section1 = image[0:rowsMid, colsMid:cols] section2 = image[rowsMid: rows, 0:colsMid] section3 = image[rowsMid:rows, colsMid:cols] sectionsList = [section0, section1, section2, section3] sectionAvgColorList = [] for i in sectionsList: pixelSum = 0 yRows, xCols, chs = i.shape pixelCount = yRows*xCols totRed = 0 totBlue = 0 totGreen = 0 for x in range(xCols): for y in range(yRows): bgr = i[y,x] b = bgr[0] g = bgr[1] r = bgr[2] totBlue = totBlue+b totGreen = totGreen+g totRed = totRed+r avgBlue = int(totBlue/pixelCount) avgGreen = int(totGreen/pixelCount) avgRed = int(totRed/pixelCount) avgPixel = (avgBlue, avgGreen, avgRed) sectionAvgColorList.append(avgPixel) return sectionAvgColorListprint(fourSectionAvgColor(img))cv2.waitKey(0)cv2.destroyAllWindows()