实时切图,并显示切割的矩形框
绑定鼠标点击和移动事件
注意绘图时,cv是会修改原图像的,所以需要一份拷贝
import cv2 as cv
# 将传入的img选择的部分返回
def cut(img):
cv.namedWindow('img', cv.WINDOW_NORMAL)
click_cnt = 0
click_pos = []
move_x = 0
move_y = 0
def on_mouse(event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN: # 左键点击
print(x, y)
nonlocal click_cnt, click_pos, move_x, move_y
click_pos.append([x, y])
click_cnt += 1
if event == cv.EVENT_MOUSEMOVE:
move_x, move_y = x, y
cv.setMouseCallback('img', on_mouse)
while True:
img_copy = img.copy()
if click_cnt == 1:
x1, y1 = click_pos[0]
cv.rectangle(img_copy, (x1, y1), (move_x, move_y), (255, 0, 0), 5)
cv.imshow('img', img_copy)
cv.waitKey(10)
if click_cnt == 2:
break
# 完成两次点击
print(click_pos)
[x1, y1], [x2, y2] = click_pos
x1, x2 = min(x1, x2), max(x1, x2)
y1, y2 = min(y1, y2), max(y1, y2)
part = img[y1:y2, x1:x2, :]
return part
def main():
img_path = './img6.png'
part_path = './part55.png'
img = cv.imread(img_path)
part = cut(img)
cv.imwrite(part_path, part)
if __name__ == '__main__':
main()