我有一个7段显示的图像。我想要跟踪每个片段的颜色。作为起点,我创建了一个程序,在这个程序中,我使用OpenCV的Canny边缘检测来检测段的边缘。我也得到了这些边的位置。
我的问题是我不知道如何检测边缘内部的那些区域并获得它们的颜色。在这里,我张贴我的程序代码:
import cv2
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
def size(name):
""" Print width and height and return value """
img = Image.open(name)
width, height = img.size
total=width*height
print('Width=%s, Height=%s, Total=%s pixels'%(width, height,total))
return width, height
def canny_edge_detection(name,minval,maxval):
""" Edge detection function """
image=cv2.imread(name)
canny=cv2.Canny(image, minval, maxval)
arrayimage=Image.fromarray(canny)
cannylist=canny.tolist()
return cannylist, image, canny
def edge_coordinates(pixel_list,color):
""" Obtain the coordinates of each pixel of the edges to a list(i,j) """
edgelocationlist=[]
for i in range(0,height):
rowpixels=edgepixels[i]
for j in range(len(rowpixels)):
if rowpixels[j]==255:
edgelocationlist.append((i, j))
return edgelocationlist
def plot_original_edge(original_image, edge_image):
""" Create a subplot of the original image and the image of the edges. """
plt.subplot(121),plt.imshow(original_image,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edge_image,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()
这是一个链接到一个子情节,我已经创建了两个图像,原始的和边缘的一个:7段:原图和边缘图。
对于每个片段,您都有一个单独的轮廓。您可以通过在黑色图像上绘制相应的轮廓(白色,填充)来创建一个分段的蒙版。最后,使用cv2。mean,它接受一个掩码参数来获得该掩码内的RGB平均值,即对于该段。如果整个部分的颜色相同,那么平均值将是。