Python实现图像截图划分区域(手动划分区域)

类似于聊天工具中的截图功能,只不过是对选定照片的区域截取,这部分功能可用于对于复杂的书籍目录结构的文字识别,按照选框区域拉取的先后顺序生成子图。

1.成果展示:

我们只是希望文字识别目录提取到我们想要的部分,比如这个“第4篇        流行框架与XML技术”对于我们用处不大,我们只需要按照顺序拉选框框住目标区域即可。

选完了框按‘S’键保存,按‘R’键取消当前的选框(不是全部)

保存的图片按照顺序存储在对应的文件夹里。

这个程序只是一个选框并保存的功能,没有加入文字识别。文字识别使用百度飞桨配置的。

import os
import cv2
# from PIL import ImageGrab
import numpy as np

# 鼠标回调函数
def draw_rectangle(event, x, y, flags, param):
    global start_point, end_point, drawing, top_left_pt, bottom_right_pt,sum_pt_list

    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        start_point = (x, y)
    elif event == cv2.EVENT_MOUSEMOVE:
        if drawing:
            end_point = (x, y)
    elif event == cv2.EVENT_LBUTTONUP:
        drawing = False
        end_point = (x, y)
        top_left_pt = min(start_point[0], end_point[0]), min(start_point[1], end_point[1])
        bottom_right_pt = max(start_point[0], end_point[0]), max(start_point[1], end_point[1])
        sum_pt_list.append([top_left_pt,bottom_right_pt])
        cv2.rectangle(img, top_left_pt, bottom_right_pt, (0, 0, 0), thickness=3)

# 读取图片
global img
image_path = 'D:/jupyter/百度飞浆的OCR识别/PDF/JavaScript3.png'
img = cv2.imdecode(np.fromfile(image_path, dtype=np.uint8), 1)

# 初始化全局变量
start_point = (0, 0)
end_point = (0, 0)
drawing = False
top_left_pt = (0, 0)
bottom_right_pt = (0, 0)
sum_pt_list = []


# 创建窗口并绑定鼠标回调函数
cv2.namedWindow("image", cv2.WINDOW_NORMAL)
# cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_rectangle)
output_img = []
while True:
    cv2.imshow('image', img)
    key = cv2.waitKey(1) & 0xFF

    # 按下'r'键重置选框区域
    if key == ord('r'):
        # img = cv2.imread('input.jpg')
        # img = cv2.resize(img, (800, 600))
        
        if len(sum_pt_list)>0:
            top_left_pt, bottom_right_pt = sum_pt_list.pop(-1)
            cv2.rectangle(img, top_left_pt, bottom_right_pt, (255, 255, 255), thickness=3)
            top_left_pt, bottom_right_pt = (-1, -1), (-1, -1)

    # 按下's'键保存选框区域的子图片
    elif key == ord('s'):
        # if top_left_pt != (-1, -1) and bottom_right_pt != (-1, -1):
        if len(sum_pt_list)>0:
            for i in range(len(sum_pt_list)):
                sub_img = img[sum_pt_list[i][0][1]:sum_pt_list[i][1][1], sum_pt_list[i][0][0]:sum_pt_list[i][1][0]]
                output_path = 'D:/jupyter/百度飞浆的OCR识别/PDF/output_{}.jpg'.format(int(time.time()) + i)
                encoded_path = output_path.encode('utf-8')
                native_path = os.fsdecode(encoded_path)
                output_img.append(sub_img)
                # print('D:/jupyter/百度飞浆的OCR识别/PDF/output_{}.jpg'.format(int(time.time())+i))
                cv2.imwrite(native_path, sub_img)
                
            break
cv2.destroyAllWindows()

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python实现图像情感多分类的代码可以参考以下示例: import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Activation, Flatten from keras.layers import Conv2D, MaxPooling2D from keras.utils import np_utils from keras.datasets import cifar10 # 加载数据 (x_train, y_train), (x_test, y_test) = cifar10.load_data() # 格式化数据 x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 # 将类别向量转换为二进制类别矩阵 y_train = np_utils.to_categorical(y_train, 10) y_test = np_utils.to_categorical(y_test, 10) # 建立模型 model = Sequential() # 卷积层 model.add(Conv2D(32, (3, 3), padding='same', input_shape=x_train.shape[1:])) model.add(Activation('relu')) # 池化层 model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) # 全连接层 model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(10)) model.add(Activation('softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_test, y_test), shuffle=True) ### 回答2: 要实现图像情感多分类,可以使用Python中的深度学习框架,如TensorFlow或PyTorch。以下是一个简单的Python代码示例: 1. 数据准备: 首先,你需要准备一个带有标签的图像数据集。可以使用已有的数据集(如FER2013或IMDB-WIKI等),或者自己手动标注数据。 数据集需要包含图像数据和对应的情感标签。 2. 导入依赖库: ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers ``` 3. 构建模型: 使用深度学习模型进行图像情感分类,可以选择卷积神经网络(CNN)模型。以下是一个基本的CNN模型示例: ```python model = keras.Sequential([ layers.Conv2D(32, (3, 3), activation='relu', input_shape=(image_width, image_height, 3)), layers.MaxPooling2D(pool_size=(2, 2)), layers.Conv2D(64, (3, 3), activation='relu'), layers.MaxPooling2D(pool_size=(2, 2)), layers.Flatten(), layers.Dense(64, activation='relu'), layers.Dense(num_classes, activation='softmax') ]) ``` 这个模型包含了卷积层、池化层、全连接层等。最后一层使用softmax激活函数,输出所有类别的概率。 4. 编译模型: ```python model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 在编译模型时,需要选择优化器和损失函数。 5. 训练模型: ```python model.fit(train_images, train_labels, epochs=num_epochs, batch_size=batch_size) ``` 使用训练集进行模型的训练,可以通过指定训练轮数和批次大小。 6. 模型评估: ```python test_loss, test_acc = model.evaluate(test_images, test_labels) ``` 使用测试集评估模型的性能。 7. 进行预测: ```python predictions = model.predict(test_images) ``` 使用训练好的模型进行预测。 以上是一个基本的Python代码示例,用于实现图像情感多分类任务。具体实现还需要根据实际情况进行调整和优化,例如数据预处理、模型调参等。 ### 回答3: 要实现图像情感多分类的代码,可以使用深度学习框架如TensorFlow或PyTorch。以下是一个基本的示例代码: 1. 数据准备: - 收集或下载具有多种情感标签的图像数据集。 - 数据预处理:将图像转换为合适的尺寸和格式,并将其划分为训练集和测试集。 2. 搭建模型: - 使用卷积神经网络(CNN)作为模型的基础。 - 可以根据具体情况选择不同的CNN架构,如VGG、ResNet或Inception等。 - 添加全局池化层和全连接层等适当的层。 3. 模型训练: - 使用训练集对模型进行训练。 - 定义损失函数,一般使用交叉熵损失函数。 - 选择优化器,如Adam优化器。 - 设置合适的超参数,如学习率和批次大小。 - 迭代训练模型直到收敛或达到预定的停止准则。 4. 模型评估: - 使用测试集对训练好的模型进行评估。 - 计算预测准确率、召回率、F1分数等指标。 5. 预测应用: - 使用训练好的模型进行预测。 - 输入一张待分类的图像,通过模型输出对应的情感标签。 以上是一个基本的流程,具体的实现过程涉及到许多细节和调优。可以根据实际需求和数据集特点对代码进行进一步的优化和改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不叫十三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值