Python,图像大小调整正向映射

时间:2018-11-15 09:35:54

标签: python-3.x opencv image-processing scaling image-resizing

我设法制作了两个不同的代码,其中之一是从堆栈溢出的另一篇文章中获得的,这两个代码都可以在不使用任何openCV函数(例如resize)的情况下将图像放大,但它们都使用向后映射,但是我似乎无法将代码转换为前向映射,这将导致带有黑色“图案”像素的缩放图像。如果对链接解释是什么向前/向后映射有疑问,可以找到here

我对两个代码使用相同的图像。我已经看过正向映射的理论,但是到目前为止还无法实现,我不断收到我一直在尝试调试的错误,但到目前为止没有运气。有时我会得到全黑的图像,但是尺寸合适。

Image U use

下面的代码是缩放的工作代码,而不是我尝试过向前映射的代码(如果需要的话),我也可以发布它。

代码

import cv2 as cv
import numpy as np

img = cv.imread('Scale.jpg')

def upScaling(image, scale):
    (h, w, dim) = img.shape
    scaleH = h * scale
    scaleW = w * scale
    #making sure that the scale factor is an integer
    sH = int(scaleH)
    sW = int(scaleW)
    # Get the ratio of the rows
    row_ratio = h / scaleH
    # Getting the ratio of the cols
    column_ratio = w / scaleW
    # i get a list position of the rows
    row_position = np.floor(np.arange(sH) * row_ratio).astype(int)
    #getting a list of position of the columns
    column_position = np.floor(np.arange(sW) * column_ratio).astype(int)
    # Initialize The scaled image called imageScaled
    scaledUp = np.zeros((sH, sW, 3), np.uint8)
    for i in range(sH):
        for j in range(sW):

        scaledUp[i, j] = img[row_position[i], column_position[j]]

    return scaledUp
ScalingUp = upScaling(img, 1.3)
cv.imshow('Scaling up', ScalingUp)

代码#2

    import cv2

    import numpy as np

    img = cv2.imread('Scale.jpg', 0)

    cv2.imshow('unscaled', img)

    h,w = img.shape[:2]

    print(h)

    print(w)

    def resizePixels(pixels,w1,h1,w2,h2):
        retval = []
        x_ratio = (int)((w1<<16)/w2) +1
        print(x_ratio)
        y_ratio = (int)((h1<<16)/h2) +1
        print(y_ratio)
        for i in range(h2):
            for j in range(w2):
                x2 = ((j*x_ratio)>>16)
                y2 = ((i*y_ratio)>>16)
            #add pixel values from original image to an array
            retval.append(pixels[y2,x2])
        return retval;

    ret = resizePixels(img,w,h,500,500)
    #reshape the array to get the resize image
    dst = np.reshape(ret,(500,500))

    cv2.imshow('Resize',dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

希望,有可能将我当前的代码转换为使用前向映射的版本,如果没有的话,我可以毫无疑问地编写新代码。

0 个答案:

没有答案