设计背景
环境:vscode+py+opencv
前段时间参与公司设计验证的一颗显控soc,有一个刷图bug直到流片出来后才发现,在同一行排布多个具有alpha数据的图片时,图片的最后四列alpha数据提取会提前终止,以至于alpha值都与第一列alpha一致,所以考虑子在不改变图片显示效果的前提下,对该bug进行规避,首先考虑到的是最简单的办法,通过opencv对图片进行提前处理,加入无效的数据边框。也整理下OpenCV处理图片边框问题
OpenCV函数原型分析
cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value)
copyMakeBorder(src: Mat, top, bottom, left, right, borderType, dts: Mat = …, value=…)
src:需要填充的图像
top:图像上面填充边界的长度
bottom:图像上下面填充边界的长度
left:图像左面填充边界的长度
right :图像右面填充边界的长度
borderType:边界的类型
BORDER_REPLICATE:复制法,即复制最边缘的像素。例如:aaaa|abcdefg|ggggg
BORDER_REFLECT:反射法,即以最边缘的像素为对称轴。例如:fedcba|abcdefg|gfedec
BORDER_REFLECT_101:反 射法,也是最边缘的像素为对称轴,但与BORDER_REFLECT有区别。例如:fedcb|abcdefg|fedec
BORDER_WRAP:外包装法,即以图像的左边界与右边界相连,上下边界相连。例如:cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法。
给图片添加top_size、bottom_size、left_size、right_size,边框的RGB数据,因为功能要设置成透明无效数据,所以RGB数据设置位0
rgb_extrention=cv2.copyMakeBorder(rgb_page,top_size,bottom_size,left_size,right_size, cv2.BORDER_CONSTANT,value=(R,G,B))
添加alpha数据
'''
'''
* Copyright(c) 2022 AiXieSheng Technology. All Rights Reserved
Author: wentao
Date: 2022-09-07 10:37:41
Description:
LastEditTime: 2022-11-12 15:14:53
LastEditors: your name
FilePath: \copyMakeBorder\read_png_rgb.py
'''
import matplotlib.pyplot as plt # plt 用于显示图片
import numpy as np
import cv2
top_size,bottom_size,left_size,right_size=(0, 0, 4, 4)
path1 = "F:/opencv/copyMakeBorder/page/warm_10_def.png"
img1=cv2.imread(path1)
rgb_page = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB) #COLOR_BGR2BGRA
rgb_extrention=cv2.copyMakeBorder(rgb_page,top_size,bottom_size,left_size,right_size, cv2.BORDER_CONSTANT,value=(0,0,0))
cv2.namedWindow('gray1',cv2.WINDOW_NORMAL)
cv2.imshow('gray1',rgb_page)
plt.imshow(rgb_extrention) # 显示图片
plt.axis('on') # 显示坐标轴
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()