现在有一个任务需要获取几千张图片中的指定位置的像素值(每个图片的位置不一样,需要手动标注),写了一个程序循环文件夹中的所有图片,每次会显示一张图然后手动点击图片中需要提取像素的位置,按Enter键切换到下一张,每张图的文件名和像素会被记录到color.txt文件中
import cv2
import os
import numpy as np
from PIL import Image
# 定义鼠标点击事件并将点击坐标输入数组
def mouse_img_cod(event, cod_x, cod_y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
xy = "%d,%d" % (cod_x,cod_y)
cv2.circle(img, (cod_x,cod_y), 1, (255, 0, 0), thickness = -1)
cv2.putText(img, xy, (cod_x,cod_y), cv2.FONT_HERSHEY_PLAIN,1.0, (0,0,0), thickness = 1) # 将坐标值放在图片内
cv2.imshow("image", img)
pro_x.append(cod_x)
pro_y.append(cod_y)
path = r"E:\doc\traindatasets\img_rec"
for name in os.listdir(path):
img_path = os.path.join(path, name)
img = cv2.imread(img_path)[:,:,:3]
pro_x = []
pro_y = []
cv2.namedWindow('image', cv2.WINDOW_AUTOSIZE) # 创建一个名为image的窗口
cv2.setMouseCallback("image", mouse_img_cod) # 鼠标事件回调
cv2.imshow('image',img) # 显示图片
cv2.waitKey(0) # 按下任意键退出窗口
cv2.destroyAllWindows()
print(pro_y[0], pro_x[0]) # 打印坐标
img = cv2.imread(img_path)[:,:,:3]
B,G,R = img[pro_y[0], pro_x[0], :]
print("file: {} RGB: {} {} {}".format(name, R, G, B))
file = open("color3.txt", "a+")
file.write("file: {} RGB: {} {} {}\n".format(name, R, G, B))
file.close()
# img = np.ones((256, 256, 3)) * np.array([140, 142, 149])
# img = img.astype(np.uint8)
# color = Image.fromarray(img)
# color.show()
# print()