文章目录[隐藏]
前言
我们用无人机或者遥感拍到的图片可能是特别大像素的图片,而我们的模型训练的时候可能是训练的数据集都是可能经过人工筛选的数据集,就目标相对清晰的图片,而我们用yolov5已经训练好的模型去推理大像素图片的时候,效果特别差,如下图所示:
比如上图,我们的目标是识别花,可以看到,很多都没有检测出来,我们需要将大像素的图片切割成小像素的,再来进行推理
import os.path
from PIL import Image
import cv2
import matplotlib.pyplot as plt
from tqdm import tqdm
def sliding_window(image, stepSize, windowSize):
# slide a window across the image
for y in range(0, image.shape[0], stepSize):
for x in range(0, image.shape[1], stepSize):
# yield the current window
yield (x, y, image[y:y + windowSize[1], x:x + windowSize[0]])
def shixian():
(winW, winH) = (1024, 1024)
# 步长大小
stepSize = 1024
cnt = 0
for filename in os.listdir('./image'):#存的image图片,如1.jpg
filenames = './image/' + filename
image = cv2.imread(filenames, 1)
for (x, y, window) in sliding_window(image, stepSize=stepSize, windowSize=(winW, winH)):#进行裁剪
# if the window does not meet our desired window size, ignore it
if window.shape[0] != winH or window.shape[1] != winW:
continue
# since we do not have a classifier, we'll just draw the window
clone = image.copy()
cv2.rectangle(clone, (x, y), (x + winW, y + winH), (0, 255, 0), 2)
cv2.imshow("Window", clone)
cv2.waitKey(100)
slice = image[y:y + winH, x:x + winW]
cv2.namedWindow('sliding_slice',0)
cv2.imshow('sliding_slice', slice)
cv2.waitKey(100)
cnt = cnt + 1
Img_Name = './' + str(cnt) + '.jpg'
cv2.imwrite(Img_Name, slice)
print('cnt', cnt)
# cv2.imwrite('./dd.jpg', slice)
for i in range(cnt):
Img_Name = './' + str(i)+'.jpg'
cv2.imwrite(Img_Name,slice)
plt.savefig('./temp{}.png'.format(i))
plt.clf()
if __name__ == '__main__':
shixian()
最后,我们每一张图片切成了15份
原图:
切完后的图:
这里展示一张推理后的效果图:
这里是根据步长和目标框的值大小来进行切割的,算出来15份,如果你们需要不同的大小,改上面的数值就好
版权声明:本文为CSDN博主「lizexu369」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_51038781/article/details/121939335
暂无评论