专业的编程技术博客社区

网站首页 > 博客文章 正文

117.Python——OpenCV实现图像按比例缩放

baijin 2024-08-31 16:15:41 博客文章 6 ℃ 0 评论

在实际应用中,经常需要将图像按比例缩放,比如我们在进行目标检测的时候,将输入图像的大小按照一定比例缩放成,常见图像大小:416、448、480、512、608、640等,然后进行预测,并返回预测结果,其中包括目标所在的位置bbox(xmin,ymin,xmax,ymax),但我们需要在原图中进行绘制目标框,所以这里需要一个缩放因子,来进行实现缩放前后的坐标转换。

import cv2

imgpath="img/240.jpg"
img=cv2.imread(imgpath)
print(img.shape)
#目标框的位置
(xmin,ymin,xmax,ymax)=(800,100,1100,700)
cv2.rectangle(img,(xmin,ymin),(xmax,ymax),(255,0,0),2)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#输出结果:(H,W,C)
(800, 1200, 3)

下面我们演示一下把原图像按比例缩放到608,并在保持目标框的位置相对不变。

实现代码:

import cv2

imgpath="img/240.jpg"
img=cv2.imread(imgpath)
print(img.shape)
#目标框的位置
(xmin,ymin,xmax,ymax)=(800,100,1100,700)
cv2.rectangle(img,(xmin,ymin),(xmax,ymax),(255,0,0),2)
cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()


def resize_img(img,size=608):
    #计算缩放比例
    scale_x= size/ img.shape[1]
    scale_y = size/ img.shape[0]
    
    img=cv2.resize(img,None,None,fx=scale_x,fy=scale_y)
    return scale_x,scale_y,img

#缩放图片
sx,sy,dstimg=resize_img(img,608)
print(sx,sy,dstimg.shape)
#计算图像缩放后目标框的位置
(xmin,xmax)=(int(xmin*sx),int(xmax*sx))
(ymin,ymax)=(int(ymin*sy),int(ymax*sy))
#画目标框
cv2.rectangle(dstimg,(xmin,ymin),(xmax,ymax),(0,255,0),2)
cv2.imshow("img",dstimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

从运行的结果来看,目标框在缩放前后,都是框住图中的目标对象(person),从而可以实现输入图像与实际图像大小一致的情况下,能准确框住目标对象。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表