菜鸟代码,python学习日常(二)图像分块拼接

	之前在跑神经网络时,输入原图位3m左右的图像出现了超内存的情况,现在很多模型对于图像处理的输入大小都有限制,本菜鸟暂时还不知道有什么办法可以解决,百度了一下发现可以将图片裁剪分块处理并拼接起来,我之后也试了一下,发现有点效果,所以来记录一下。

核心思路时通过 for 循环历遍图像xy轴像素,历遍的单位为图像块的大小,这个时可以自己设置的

block_size = 512 
rows,cols,_ = org_image.shape
for y in range(0,rows,block_size):
	for x in range(0,cols,block_size):

接下来是对于像素处理的防止越界以及图像历遍中的分块部分

width = min(block_size,cols-x)
height = min(block_siae,rows-y)
block = org_img[y:y+height,x:x+width].copy()

再后面就是处理图像的算法处理与图像拼接

hsv = cv2.cvtColor(block,cv2.COLOR_BGR2HSV)
process_img[y:y+height,x:x+width] = hsv

为了避免缝隙,我们添加一个判断语句

if hsv.shape != (block.shape[0],block.shape[1],3):
	hsv = cv2.resize(hsv,(block.shape[1],block.shape[0]))

我们处理图像之后发现图像拼接完之后会出现边界现象十分严重的问题,如下图
在这里插入图片描述
我查了百度了一下解决办法,有一种 overlap 的方法能够缓解这个问题就试了一下,代码很简单,只要改动 for 循环中的步长参数就行

overlap = 20
for y in range(0,rows,block_size-overlap):
	for x in range(0,cols,block_szie-overlap):

处理出的图片效果如下所示:
在这里插入图片描述
好像并没有什么用(😂😂😂😂😂),只是改变的拼接的位置,看来菜鸟还得继续找别的方法解决这个问题了。

下面附上完整的代码以供参考

import cv2
import numpy as np


def block_seg(inputPath,outputPath):
    original_image = cv2.imread(inputPath)
    if original_image is None:
        print("Could not read the image.")
        return

    block_size = 512
    rows,cols ,_ = original_image.shape
    overlap = 40

    process_image = np.zeros_like(original_image)
    process_gray = cv2.cvtColor(process_image,cv2.COLOR_BGR2GRAY)
    for y in range(0,rows,block_size - overlap):
        for x in range(0,cols,block_size - overlap):
            width = min(block_size,cols - x)
            height  = min(block_size,rows - y)

            roi = (x,y,x + width,y + height)
            block = original_image[y:y+height,x:x+width].copy()
            # process_image algorithm
            gray = cv2.cvtColor(block,cv2.COLOR_BGR2GRAY)
            hist= cv2.equalizeHist(gray)
            # avoid the block gap
            if hist.shape != (block.shape[0],block.shape[1],1):
                hist = cv2.resize(hist,(block.shape[1],block.shape[0]))

            process_gray[y:y+height,x:x+width] = hist

    cv2.imwrite(outputPath, process_gray)

注:菜鸟的前面的代码中有一个对原始图像灰度化的处理是因为我图像算法处理的方法时在灰度图片下进行的,如果处理图片时彩色的可以删掉这一步,并改一下通道数;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值