python-opencv滑窗裁剪对于图片边缘的处理

实验任务为将下图的影像,按照512*512,50%的重复率进行滑窗裁剪。图片的边缘部分要求保留。

python-opencv滑窗裁剪对于图片边缘的处理_第1张图片

import cv2
image = cv2.imread('.image.jpg')    # 此处为影像存储的位置
print(str(image.shape))

'''
(2563, 3765, 3)    # 影像的尺寸为2563 * 3765
'''

https://blog.csdn.net/weixin_38346042/article/details/122594512阅读参考一些文章之后,笔者发现一些滑窗裁剪将影像的边缘区域舍弃,按照实验要求需要保留边缘区域,笔者主要借鉴这篇文章完成此次实验。https://blog.csdn.net/weixin_38346042/article/details/122594512

对于图像的裁剪,可将图像看作一个三维数组,先将RGB彩色图像变成一维的灰度图像,再以左上角为原点,以单个像素为单位,向下和向右建立坐标系。整张图片可看作一个三维的数组(x, y ,gray)(gray为灰度值)。

主要代码如下

import cv2

img = cv2.imread(r'image.jpg')
img_copy = img.copy()
imgheight = img.shape[0]   

imgwidth = img.shape[1]
'''
img.shape用于查看影像尺寸参数和色彩通道参数(2563, 3765, 3)
影像的高为img.shape[0] == 2563,宽为img.shape[1] == 3765
'''

window_w = 512       # 设置滑窗的尺寸为512 * 512
window_h = 512
step = 256           # 需要保留50%的重叠度,此处的步长位256
x1 = 0               # 初始化x1, y1两个变量
y1 = 0

'''
滑窗裁剪实现的主要原理是两个for循环的嵌套,以及将三种不同的情况的if条件句
'''

for y in range(0, imgheight, step):
    for x in range(0, imgwidth, step):

        y1 = y + window_h  # 此处的y1为滑窗的下边界
        x1 = x + window_w  # 此处的x1为滑窗的右边界

#  第一种情况是当滑窗的右边界和下边界超出范围时,将影像边界值赋给x1,y1      
        if x1 >= imgwidth and y1 >= imgheight:
            x1 = imgwidth
            y1 = imgheight

            titles = img_copy[y1 - step_h:y1, x1 - step_w:x1]
            cv2.imwrite("D:/py/image_4/" + "title" + str(x) + '_' + str(y) + ".jpg", titles)

# 第二种情况是当滑窗的下边界超出影像边界时,将下边界值赋给y1
        elif y1 >= imgheight:
            y1 = imgheight
            titles = img_copy[y1 - step_h:y1, x:x + step_w]
            cv2.imwrite("D:/py/image_4/" + "title" + str(x) + '_' + str(y) + ".jpg", titles)
# 第三种情况是右边界超出时将影像的右边界值赋给x1
        elif x1 >= imgwidth:
            x1 = imgwidth
            titles = img_copy[y:y + step_h, x1 - step_w:x1]
            cv2.imwrite("D:/py/image_4/" + "title" + str(x) + '_' + str(y) + ".jpg", titles)
# 第四种情况是均为超出即为[y:y + step_h, x:x + step_w]
        else:
            titles = img_copy[y:y + step_h, x:x + step_w]  # 没有出边界
            cv2.imwrite("D:/py/image_4/" + "title" + str(x) + '_' + str(y) + ".jpg", titles)

以上是本次滑窗裁剪实验的主要内容,这是本人第一次写实验报告并发布,如在内容上有所,错误和欠缺,敬请指正

你可能感兴趣的:(计算机视觉,人工智能,python)