显示一张子图片,并用文本信息作为标题
Nov24,星期五
审查我的26日.ipynb的记录本的代码,我决定对他们进行重构。放到imagebox.py文件中。
- show_ith_box函数,可以参考save_ith_box函数
Nov,29,星期三
这之间,我被心理学书籍《被讨厌的勇气》和《卡片笔记写作法》吸引,因此这中间的五天,我并没有处理我的代码积累工作。写代码,与计算机亲密交互,是不是我热爱的事情呢?今天读到一本书,说,只需要做好事业,不能只为了赚钱。我们的技能能为别人,和社会带来什么贡献呢?
这是个需要最近思考和实践的问题。
show_img_ith_box,在重构的过程中,我添加了这个函数。
show_ith_box,把这个函数的print修改为logger.info
cv2_show_img,将这以上的三个函数,放入imagebox.py文件中。
外部只需要调用show_img_ith_box就可以显示子图片,和提取的文本信息。
#Nov,29
def cv2_show_img(cv2img, head_str ='test'):
'''
cv2img : what is cv2.imread return array
'''
import cv2
cv2.imshow(head_str,cv2img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def show_ith_box(im, box_list, i = 0):
'''
display one of 10 box in a big picture
im: 被cv2处理过的图片
box_list: 预训练模型提取的坐标和文本信息
i:显示目标框的索引
'''
array , att_str= box_list[i]
logger.info(array)
logger.info(att_str)
x1,y1,x2,y2 = array
x1,y1,x2,y2 = int(x1),int(y1),int(x2),int(y2)
logger.info('convert to int')
logger.info('display img by cv2')
import cv2
# %matplotlib inline
# im = cv2.imread(im_file)
logger.info('cv2.imread return : ')
logger.info(type(im))
logger.info('display cv2 to jupyter:')
patch_img = im[y1:y2,x1:x2]
logger.info(patch_img.shape)
cv2_show_img(patch_img, att_str)
logger.info('success')
def show_img_ith_box(im_file,i=0):
'''
将im_file图片的第i个目标框显示出来
'''
import cv2
im = cv2.imread(im_file)
# from imagebox import file_2_10_boxes_list
box_list = file_2_10_boxes_list(im_file)
show_ith_box(im, box_list, i)
在目标图片上绘制方框
Nov,29
继续审查剩余的代码,进行整理。
设计一个函数,show_10_box_in_a_img,将10个方框都展示出来。
from configs import dataset_path,img0,img1
im_file = dataset_path + img0
from imagebox import show_10_box_in_a_img
show_10_box_in_a_img(im_file)
imagebox.py
#Nov,29
#设计一个函数,将10个方框都展示出来。
import matplotlib.pyplot as plt
# set display defaults
plt.rcParams['figure.figsize'] = (12, 9) # small images
plt.rcParams['image.interpolation'] = 'nearest' # don't interpolate: show square pixels
plt.rcParams['image.cmap'] = 'gray' # use grayscale output rather than a (potentially misleading) color heatmap
def show_10_box_in_a_img(im_file):
'''
设计一个函数,将10个方框都展示出来。
im_file:只需要传入一个路径
使用pyplot绘制
1.
'''
# 1先绘制图片
im = plt.imread(im_file)
plt.imshow(im)
# 2 绘制方框,需要box_list函数
# from imagebox import file_2_10_boxes_list
box_list = file_2_10_boxes_list(im_file)
loop = len(box_list)
# print('loop : ',loop)
logger.info(f'loop : {loop}')
# 3 绘制
for i in range(loop):
# i=0
array , att_str= box_list[i]
# print(array)
# print(att_str)
bbox = array
# 绘制盒子
plt.gca().add_patch(
plt.Rectangle((bbox[0], bbox[1]),
bbox[2] - bbox[0],
bbox[3] - bbox[1], fill=False,
edgecolor='red', linewidth=2, alpha=0.5)
)
# 文本
cls = att_str
plt.gca().text(bbox[0], bbox[1] - 2,
'%s' % (cls),
bbox=dict(facecolor='blue', alpha=0.5),
fontsize=10, color='white')
plt.show()