我做了一个简单的OpenCV绘画程序。(用于创建掩码(
在下面的程序中,图像的路径写在源代码中。(硬编码(
但是,我想通过按钮加载图像。
如何在此程序上制作按钮?
import cv2 as cv
import numpy as np
win_name ='Image Recovery'
image_path='earth.jpg'
penThick=10
def onChange(value):
global penThick
penThick = cv.getTrackbarPos('penThick', win_name)
print(penThick)
def mouse_callback(event, x, y, flags, param):
global srcImage, maskLayer, paintingImage
#paintingImage = param[0]
#maskLayer = param[1]
if event == cv.EVENT_MOUSEMOVE :
if flags & cv.EVENT_LBUTTONDOWN :
cv.circle(maskLayer, (x,y), penThick, (0, 0, 0), -1);
cv.circle(paintingImage, (x, y), penThick, (0, 0, 0), -1);
if event == cv.EVENT_RBUTTONDBLCLK :
maskLayer = (255,255,255)
paintingImage = cv.imread(image_path, cv.IMREAD_ANYCOLOR)
cv.imshow(win_name, paintingImage)
if __name__ == '__main__':
global srcImage, maskLayer, paintingImage
srcImage = cv.imread(image_path, cv.IMREAD_ANYCOLOR)
paintingImage = cv.imread(image_path, cv.IMREAD_ANYCOLOR)
maskLayer = np.zeros((srcImage.shape[0], srcImage.shape[1] , 3), np.uint8)
maskLayer[:] = (255,255,255)
cv.namedWindow(win_name, cv.WINDOW_GUI_EXPANDED)
cv.imshow(win_name, paintingImage)
cv.setMouseCallback(win_name,mouse_callback, (paintingImage, maskLayer))
cv.createTrackbar('penThick',win_name, 10, 15, onChange)
cv.waitKey(0)
cv.imwrite("out.png", maskLayer)
cv.destroyAllWindows()
从你的代码中,我无法判断你用什么作为 GUI。
最平易近人的GUI来自python标准库。它看起来有点不合适,但它可以完成工作。
您可以尝试在程序中安装以下代码。
from tkinter import Tk, filedialogue
gui_root = Tk()
image_path = filedialogue.askopenfilename(initialdir=“/“, title=“Pick an Image”, filetypes=((“Image Files”, “*.jpg”),(“All Files”, “*.*”)