78 lines
2.1 KiB
Python
78 lines
2.1 KiB
Python
# -- coding: utf-8 --
|
|
from ctypes import *
|
|
import cv2 # 4.2.0.32
|
|
import numpy as np
|
|
from datetime import datetime
|
|
import time
|
|
|
|
drawing = False # 鼠标是否按下
|
|
ix, iy = -1, -1 # 初始坐标
|
|
roi = None # ROI区域
|
|
|
|
|
|
def _cal_roi(img):
|
|
# 获取当前时间
|
|
now = datetime.now()
|
|
# 转换为时间戳(秒)
|
|
timestamp = time.mktime(now.timetuple())
|
|
# 转换为时间戳(毫秒)
|
|
timestamp_ms = int(timestamp * 1000)
|
|
# 获取当前时间的毫秒部分
|
|
milliseconds = now.microsecond // 1000
|
|
# 合并秒和毫秒
|
|
timestamp_ms += milliseconds
|
|
date_str = time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime(timestamp))
|
|
path = "./wurenji/" + date_str + ".jpg"
|
|
rst = cv2.imwrite(path, img)
|
|
print(date_str)
|
|
print("cv2.imwrite rst: " + str(rst))
|
|
|
|
|
|
# 鼠标回调函数
|
|
def cal_roi(event, x, y, flags, param):
|
|
global ix, iy, drawing, roi
|
|
|
|
if event == cv2.EVENT_LBUTTONDOWN:
|
|
drawing = True
|
|
ix, iy = x, y
|
|
|
|
# elif event == cv2.EVENT_MOUSEMOVE:
|
|
# if drawing:
|
|
# img = param
|
|
# cv2.rectangle(img, (ix, iy), (x, y), (0, 255, 0), 1)
|
|
# roi = (min(ix, x), min(iy, y), abs(ix - x), abs(iy - y))
|
|
|
|
elif event == cv2.EVENT_LBUTTONUP:
|
|
drawing = False
|
|
roi = (min(ix, x), min(iy, y), abs(ix - x), abs(iy - y))
|
|
if roi:
|
|
x = roi[0]
|
|
y = roi[1]
|
|
w = roi[2]
|
|
h = roi[3]
|
|
img = param
|
|
_roi_im = img[y:y+h, x:x+w].copy()
|
|
# cv2.rectangle(img, (roi[0], roi[1]), (roi[0] + roi[2], roi[1] + roi[3]), (0, 255, 0), 1)
|
|
_cal_roi(_roi_im)
|
|
|
|
|
|
# 主程序
|
|
img = cv2.imread('project.jpg') # 替换为你的图片路径
|
|
cv2.imshow('image', img)
|
|
cv2.setMouseCallback('image', cal_roi, param=img)
|
|
|
|
while True:
|
|
k = cv2.waitKey(1) & 0xFF
|
|
if k == 27: # ESC键退出
|
|
break
|
|
|
|
cv2.destroyAllWindows()
|
|
|
|
# roi变量现在包含了你勾选的ROI区域
|
|
if roi:
|
|
x, y, w, h = roi
|
|
# 处理ROI区域
|
|
# roi_img = img[y:y+h, x:x+w]
|
|
# cv2.imshow('ROI', roi_img)
|
|
# cv2.waitKey(0)
|
|
# cv2.destroyAllWindows() |