python cv2实现区域截图
时间: 2023-10-27 12:12:25 浏览: 103
你可以使用cv2库的cv2.imshow()方法来实现区域截图。以下是实现的步骤:
1. 调用cv2库的cv2.VideoCapture()方法打开摄像头。
2. 调用cv2库的cv2.namedWindow()方法设置截图窗口的名称。
3. 调用cv2库的cv2.setMouseCallback()方法设置鼠标回调函数,实现鼠标的触发事件。
4. 实现鼠标回调函数,通过cv2库的cv2.rectangle()方法绘制矩形框,确定截图区域。
5. 调用cv2库的cv2.imwrite()方法生成截图文件,并保存到本地。
以下是实现区域截图的代码示例:
```python
import cv2
# 定义鼠标触发事件的回调函数
def on_mouse(event, x, y, flags, param):
global img, point1, point2
if event == cv2.EVENT_LBUTTONDOWN: # 左键点击
point1 = (x,y)
cv2.circle(img, point1, 10, (0,255,0), 5)
cv2.imshow('image', img)
elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON): # 按住左键拖曳
cv2.rectangle(img, point1, (x,y), (255,0,0), 2)
cv2.imshow('image', img)
elif event == cv2.EVENT_LBUTTONUP: # 左键释放
point2 = (x,y)
cv2.rectangle(img, point1, point2, (0,0,255), 2)
cv2.imshow('image', img)
min_x = min(point1[0], point2[0])
min_y = min(point1[1], point2[1])
width = abs(point1[0] - point2[0])
height = abs(point1[1] - point2[1])
cut_img = img[min_y:min_y+height, min_x:min_x+width]
cv2.imwrite('./cut.jpg', cut_img)
# 打开摄像头
cap = cv2.VideoCapture(0)
# 设置窗口名称
cv2.namedWindow('image')
while(1):
ret, img = cap.read()
cv2.imshow('image', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 等待鼠标点击事件触发
point1 = None
point2 = None
cv2.setMouseCallback('image', on_mouse)
cv2.waitKey(0)
cv2.destroyAllWindows()
cap.release()
```
以上代码中,on_mouse()方法实现了鼠标回调函数。在该函数中,通过判断鼠标事件的类型,实现了绘制矩形框的功能,并根据窗口坐标计算出了截图区域。最后,通过cv2.imwrite()方法将截图保存到了本地。