使用Python OpenCV的循环中的图像拼接

问题描述 投票:0回答:2

Python的小白需要一些帮助家伙!有人能告诉我如何改写循环使用我的代码?尝试了一些不同的语法,但似乎没有工作!

img = cv2.imread("C://Users//user//Desktop//research//images//Underwater_Caustics//set1//set1_color_0001.png")

    tile11=img[1:640, 1:360]
    cv2.imwrite('tile11_underwater_caustic_set1_0001.png', tile11)

    tile12=img[641:1280, 1:360]
    cv2.imwrite('tile12_underwater_caustic_set1_0001.png', tile12)

    tile13=img[1281:1920, 1:360]
    cv2.imwrite('tile13_underwater_caustic_set1_0001.png', tile13)

    tile21=img[1:640, 361:720]
    cv2.imwrite('tile21_underwater_caustic_set1_0001.png', tile21)

    tile22=img[641:1280, 361:720]
    cv2.imwrite('tile22_underwater_caustic_set1_0001.png', tile22)

    tile23=img[1281:1920, 361:720]
    cv2.imwrite('tile23_underwater_caustic_set1_0001.png', tile23)

    tile31=img[1:640, 721:1080]
    cv2.imwrite('tile31_underwater_caustic_set1_0001.png', tile31)

    tile32=img[641:1280, 721:1080]
    cv2.imwrite('tile32_underwater_caustic_set1_0001.png', tile32)

    tile33=img[1281:1920, 721:1080]
    cv2.imwrite('tile33_underwater_caustic_set1_0001.png', tile33)

正如你所看到的,图像将被切割成9大小相等的块,如何使用循环写呢?

python image loops opencv tiling
2个回答
3
投票

这不会产生相同的结果就像你的代码,但会给你一些想法:

img = cv2.imread('sample.jpg')
numrows, numcols = 4, 4
height = int(img.shape[0] / numrows)
width = int(img.shape[1] / numcols)
for row in range(numrows):
    for col in range(numcols):
        y0 = row * height
        y1 = y0 + height
        x0 = col * width
        x1 = x0 + width
        cv2.imwrite('tile_%d%d.jpg' % (row, col), img[y0:y1, x0:x1])

0
投票

我需要的地方需要最后部分或边缘瓷片需充分平铺图像的图像拼接。

下面是我使用的代码:

import cv2
import math
import os

Path = "FullImage.tif";
filename, file_extension = os.path.splitext(Path)
image = cv2.imread(Path, 0)

tileSizeX = 256;
tileSizeY = 256;
numTilesX = math.ceil(image.shape[1]/tileSizeX)
numTilesY = math.ceil(image.shape[0]/tileSizeY)

makeLastPartFull = True; # in case you need even siez

for nTileX in range(numTilesX):
    for nTileY in range(numTilesY):
        startX = nTileX*tileSizeX
        endX = startX + tileSizeX
        startY = nTileY*tileSizeY
        endY = startY + tileSizeY;

        if(endY > image.shape[0]):
            endY = image.shape[0]

        if(endX > image.shape[1]):
            endX = image.shape[1]

        if( makeLastPartFull == True and (nTileX == numTilesX-1 or nTileY == numTilesY-1) ):
            startX = endX - tileSizeX
            startY = endY - tileSizeY

        currentTile = image[startY:endY, startX:endX]
        cv2.imwrite(filename + '_%d_%d' % (nTileY, nTileX)  + file_extension, currentTile)

0
投票

这是使用的flowfree他的代码部分海量影像重建。通过在同一区域的脚本是用切片图像的文件夹,您可以重建图像。我希望这有帮助。

import cv2
import glob
import os

dir = "." 

pathname = os.path.join(dir, "*" + ".png")
images = [cv2.imread(img) for img in glob.glob(pathname)]

img = images[0]

numrows, numcols = 1,1
height = int(img.shape[0] / numrows)
width = int(img.shape[1] / numcols)


for row in range(numrows):
    for col in range(numcols):
        y0 = row * height
        y1 = y0 + height
        x0 = col * width
        x1 = x0 + width
        cv2.imwrite('merged_img_%d%d.jpg' % (row, col), img[y0:y1, x0:x1])
© www.soinside.com 2019 - 2024. All rights reserved.