gpt4 book ai didi

python - 使用鼠标事件绘制模糊的矩形

转载 作者:行者123 更新时间:2023-12-02 17:26:33 25 4
gpt4 key购买 nike

下面的代码只是在拖动鼠标时绘制矩形,但是我只想模糊从鼠标绘制的矩形区域。

import cv2
import argparse

ref_point = []


def shape_selection(event,x,y,flags,param):
global ref_point, crop

if event == cv2.EVENT_LBUTTONDOWN:
ref_point = [(x,y)]


elif event == cv2.EVENT_LBUTTONUP:
ref_point.append((x,y))
#cv2.GaussianBlur(image,(9,9),0)
cv2.rectangle(image,ref_point[0],ref_point[1],(0,255,0),2)
#cv2.GaussianBlur(images,(9,9),0)
cv2.imshow("image",image)

ap=argparse.ArgumentParser()
ap.add_argument("-i","--image",required=True,help="Path to image")
args=vars(ap.parse_args())

image = cv2.imread(args["image"])
clone=image.copy()
#cv2.GaussianBlur(image,(9,9),0)
cv2.namedWindow("image")
cv2.setMouseCallback("image",shape_selection)

while True:
cv2.imshow("image",image)
key = cv2.waitKey(1) & 0xFF
if key == ord("r"):
image=clone.copy()
elif key == ord("c"):
break

cv2.destroyAllWindows()

最佳答案

主要的“技巧”是仅在图像的感兴趣区域(ROI)上使用GaussianBlur方法。通过适当的NumPy array indexing and slicing可以访问“Python OpenCV图像”中的矩形ROI。大多数OpenCV函数(Python API)支持仅在这些ROI上进行操作。

因此,这可能是shape_selection方法的修改版本:

def shape_selection(event, x, y, flags, param):
global image, ref_point

if (event == cv2.EVENT_LBUTTONDOWN):
ref_point = [(x, y)]

elif (event == cv2.EVENT_LBUTTONUP):
(x_ref, y_ref) = ref_point[0]

if (x_ref > x):
(x, x_ref) = (x_ref, x)
if (y_ref > y):
(y, y_ref) = (y_ref, y)

image[y_ref:y, x_ref:x] = cv2.GaussianBlur(image[y_ref:y, x_ref:x], (9, 9), 0)
image = cv2.rectangle(image, (x_ref, y_ref), (x, y), (0, 255, 0), 2)
cv2.imshow('image', image)

如果“从右到左”或“从下到上”绘制矩形,则必须交换两个记录点的 xy坐标才能进行适当的 slice 。

希望有帮助!

关于python - 使用鼠标事件绘制模糊的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59044090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com