阿里云天池零基础入门CV赛事(2)

本文介绍了如何参与阿里云天池的零基础计算机视觉(CV)赛事,专注于街景字符编码识别。通过读取数据集,理解数据标签和字符位置信息,展示了如何处理数据标注。文章还探讨了matplotlib与cv2在图像通道顺序上的差异,并给出了调整后的图像显示效果。
摘要由CSDN通过智能技术生成

需要数据小伙伴们,登录阿里云天池比赛,报名后可以将数据下载。
零基础入门CV赛事- 街景字符编码识别
以一张图片为例,读取数据集中的信息。

1 数据标签
在数据集中,训练每张图片将给出对应的编码标签,和具体的字符框的位置。

fielddescription
top左上角坐标X
height字符高度
left左上角坐标Y
width字符宽度
label字符编码

图片中字符的位置坐标
图片中字符的位置坐标
2 调用package:

import numpy as np
import json
import cv2
import matplotlib.pyplot as plt

train_json = json.load(open('C:/Users/Administrator/jupyter_work/input/mchar_train.json')) # mchar_train.json 存放的路径

print("未处理前的000000.png字符款的位置信息: ", train_json['000000.png']) # 调用字典中的数据

输出的结果为:

未处理前的000000.png字符框的位置信息:  {'height': [219, 219], 'label': [1, 9], 'left': [246, 323], 'top': [77, 81], 'width': [81, 96]}

输出的结果与我们想要的形式不同,对数据的标注进行处理。

# 数据标注处理
def parse_json(d):
    arr = np.array([
        d['top'], d['height'], d['left'], d['width'], d['label'] 
    ])
    arr = arr.astype(int)
    return arr

img = cv2.imread('C:/Users/Administrator/jupyter_work/input/mchar_train/000000.png')
# cv2.imshow("img", img)
# cv2.waitKey()
# cv2.destroyAllWindows()
arr = parse_json(train_json['000000.png'])
print("进行数据处理后的000000.png字符框的位置信息:", arr)
print("arr shape = " + str(arr.shape))

输出结果为:

进行数据处理后的000000.png字符框的位置信息: [[ 77  81]
 [219 219]
 [246 323]
 [ 81  96]
 [  1   9]]
arr shape = (5, 2)

arr shape = (5, 2),说明图片000000.png中含有两个字符。

3 打印出原始图片和字符框选字符图片

# 显示000000.png
plt.figure(figsize=(10, 10))
plt.subplot(1, arr.shape[1] + 1, 1)
plt.imshow(img)
plt.axis('off') # 将横纵坐标轴关闭

# 将000000.png中的数字框选出来
for i in range(arr.shape[1]):
    plt.subplot(1, arr.shape[1] + 1, i + 2)
    plt.imshow(img[arr[0, i]: arr[0, i] + arr[1,i], arr[2, i]: arr[2, i] + arr[3, i]])
    plt.title(arr[4, i])
    plt.axis('off') # 将横纵坐标轴关闭
plt.show()

输出的图像为:
图像的RGB通道读取有误
matplotlib和cv2读取图片通道的顺序是不同的:
matplotlib 读取顺序是:R -> G -> B
cv2 读取顺序是:B -> G -> R
上面代码:读取图像是使用cv2.imread();图像显示使用的是plt.imshow(), 所以图像的RGB通道发生了变化。

以下代码将cv2.imrea()读取图像的顺序更改为 R -> G -> B

imgRGB = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
# 显示000000.png RGB
plt.figure(figsize=(10, 10))
plt.subplot(1, arr.shape[1] + 1, 1)
plt.imshow(imgRGB)
plt.axis("off")
for i in range(arr.shape[1]):
    plt.subplot(1, arr.shape[1] + 1, i + 2)
    plt.imshow(imgRGB[arr[0, i]: arr[0, i] + arr[1,i], arr[2, i]: arr[2, i] + arr[3, i]])
    plt.title(arr[4, i])
    plt.axis('off') # 将横纵坐标轴关闭
plt.show()

输出的图像为:
正常输出图像
这就我使用零基础入门CV赛事- 街景字符编码识别数据集中的一张图片提取框选的字符。

总有一个遗忘的过程,记录一下为以后查找方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值