概述
项目中图片经常需要resize,但是直接调用resize方法可能会使图像造成畸变,下面给出,基于opencv的图像等比例缩放的方法。
import cv2
def resize_keep_aspectratio(image_src, dst_size):
src_h, src_w = image_src.shape[:2]
print(src_h, src_w)
dst_h, dst_w = dst_size
# 判断应该按哪个边做等比缩放
h = dst_w * (float(src_h) / src_w) # 按照w做等比缩放
w = dst_h * (float(src_w) / src_h) # 按照h做等比缩放
h = int(h)
w = int(w)
if h <= dst_h:
image_dst = cv2.resize(image_src, (dst_w, int(h)))
else:
image_dst = cv2.resize(image_src, (int(w), dst_h))
h_, w_ = image_dst.shape[:2]
print(h_, w_)
top = int((dst_h - h_) / 2)
down = int((dst_h - h_ + 1) / 2)
left = int((dst_w - w_) / 2)
right = int((dst_w - w_ + 1) / 2)
value = [0, 0, 0]
borderType = cv2.BORDER_CONSTANT
print(top, down, left, right)
image_dst = cv2.copyMakeBorder(image_dst, top, down, left, right, borderType, None, value)
return image_dst
if __name__ == '__main__':
image_src = cv2.imread(r"testimg/bus.jpg")
dst_size = (720, 720)
image = resize_keep_aspectratio(image_src, dst_size)
cv2.imshow("aaa", image)
print(image.shape)
if 27 == cv2.waitKey():
cv2.destroyAllWindows()
最后
以上就是粗暴夕阳为你收集整理的基于opencv的图像等比例缩放的全部内容,希望文章能够帮你解决基于opencv的图像等比例缩放所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复