python 通过按键(不用鼠标拖动)对图片进行分类

下面代码是对图片进行是否有人进行按键(不用鼠标拖动)二分类,也可以将密码本改成多分类。

import os
import shutil
import cv2

def main(path, save_path, dic, date):
    imglist = os.listdir(path)
    print(len(imglist))   # 文件夹中文件的数量
    for imgname in imglist:
        if imgname.endswith("jpg"):
            img_path = os.path.join(path, imgname)
            img = cv2.imread(img_path)
            H, W = img.shape[0], img.shape[1]
            scale = 0.6
            fimg = cv2.resize(img, (int(W * scale), int(H * scale)))
            cv2.namedWindow("img")
            cv2.moveWindow("img", 0, 0)
            cv2.imshow("img", fimg)
            cv2.waitKey(1)
            while True:
                flag = False
                input_value = input("是否有人:1:有人; 2:没人 ")
                if not input_value:
                    print("您没有输入值,请重新输入!")
                    continue
                print(input_value)
                e = input_value[-1]
                if e in dic:
                    if not os.path.exists(os.path.join(save_path, dic[e])):
                        os.makedirs(os.path.join(save_path, dic[e]))
                    if input_value == "1":
                        shutil.copy(os.path.join(path, imgname), os.path.join(save_path, dic[e]))
                    elif input_value == "2":
                        shutil.copy(os.path.join(path, imgname), os.path.join(save_path, dic[e]))
                    print("目标移动到{}文件夹".format(dic[e]))
                    flag = True
                if flag:
                    cv2.destroyAllWindows()
                    if not os.path.exists(os.path.join(save_path, date)):
                        os.makedirs(os.path.join(save_path, date))
                    shutil.move(os.path.join(img_path), os.path.join(save_path, date))  # 从源文集夹中 剪切 图片到 已处理文件夹
                    break
                else:
                    print("您输入的值没在密码本儿中!")


if __name__ == '__main__':
    src_path = r"D:\person_data"    # 源图片文件夹
    save_path = r"D:\person_cls"    # 按照文件夹分类好的图片文件夹
    date = "1108_processed"         # 已经分类的图片,相当于备份
    dic = {"1": "person", "2": "no-person"}  # 密码本, 根据按数字键(可扩展为字母键),对文件夹中的图片进行分类
    main(src_path, save_path, dic, date)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现鼠标选取圆形ROI区域并拖动,可以使用 PythonOpenCV 库。下面是一个简单的示例代码: ```python import cv2 import numpy as np # 定义全局变量 drawing = False # 是否正在绘制ROI区域 ix, iy = -1, -1 # 鼠标起始位置 # 鼠标回调函数 def draw_circle(event, x, y, flags, param): global ix, iy, drawing, radius, center # 鼠标左键按下,开始绘制ROI区域 if event == cv2.EVENT_LBUTTONDOWN: drawing = True ix, iy = x, y # 鼠标移动,更新ROI区域大小 elif event == cv2.EVENT_MOUSEMOVE: if drawing == True: radius = int(np.sqrt((x - ix)**2 + (y - iy)**2)) center = (ix, iy) # 鼠标左键释放,绘制ROI区域结束 elif event == cv2.EVENT_LBUTTONUP: drawing = False radius = int(np.sqrt((x - ix)**2 + (y - iy)**2)) center = (ix, iy) # 创建窗口并绑定鼠标回调函数 img = cv2.imread('test.jpg') cv2.namedWindow('image') cv2.setMouseCallback('image', draw_circle) while True: # 显示原图 cv2.imshow('image', img) # 绘制ROI区域 if drawing == True: cv2.circle(img, center, radius, (0, 0, 255), 2) # 检测键盘按键 k = cv2.waitKey(1) & 0xFF if k == ord('q'): break cv2.destroyAllWindows() ``` 在这个示例中,我们首先定义了一个全局变量 `drawing`,用来判断是否正在绘制ROI区域。然后,我们定义了一个鼠标回调函数 `draw_circle`,处理鼠标事件。在鼠标左键按下时,我们设置 `drawing` 为 True,记录起始位置 `ix` 和 `iy`。在鼠标移动时,如果 `drawing` 为 True,我们计算出当前鼠标位置与起始位置的距离,更新半径 `radius` 和圆心位置 `center`。在鼠标左键释放时,我们设置 `drawing` 为 False,计算出最终的半径和圆心位置。 在主程序中,我们读入一张图片,并创建一个窗口,并将鼠标回调函数 `draw_circle` 绑定到窗口上。然后,我们不断显示原图,并根据 `drawing` 的状态来绘制ROI区域。最后,我们检测键盘按键,如果按下了 'q' 键,则退出程序并销毁窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值