调整图像大小时自动缩放

2024-09-26 23:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在更改图像大小时遇到问题。然后线条的比例不再与图像的比例匹配,即线条将变得比预期的小

你知道我如何调整线的大小,使之与图像成比例吗

以下是原始图像:

image (original)

以下是我想要的结果:

image (wanted result)

但这是我调整大小后得到的结果(它在第二张图片中给出了相同的值):

image (result)

from scipy.spatial import distance as dist
from imutils import perspective
from imutils import contours
import numpy as np
import imutils
import cv2


# Method to find the mid point
def midpoint(ptA, ptB):
    return ((ptA[0] + ptB[0]) * 0.5, (ptA[1] + ptB[1]) * 0.5)


img = cv2.imread('banana4.jpg')

# Gaussian blur
blur1 = cv2.GaussianBlur(img,(3,3),1)

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_blue = np.array([5, 25, 25])
upper_blue = np.array([70, 255, 255])
thresh = cv2.inRange(hsv, lower_blue, upper_blue)

# Find contours and sort for largest contour
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)


for c in cnts:
    x, y, w, h = cv2.boundingRect(c)
    box = cv2.minAreaRect(c)
    box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)
    box = np.array(box, dtype="int")

    box = perspective.order_points(box)
    orig = img.copy()

    cv2.drawContours(orig, [box.astype("int")], -1, (0, 255, 0), 3)

    (tl, tr, br, bl) = box
    (tltrX, tltrY) = midpoint(tl, tr)
    (blbrX, blbrY) = midpoint(bl, br)

    (tlblX, tlblY) = midpoint(tl, bl)

    (trbrX, trbrY) = midpoint(tr, br)

    # draw and write the midpoints on the image
    cv2.circle(orig, (int(tltrX), int(tltrY)), 5, (255, 0, 0), -1)
    cv2.putText(orig, "({},{})".format(tltrX, tltrY), (int(tltrX - 50), int(tltrY - 10) - 20),
            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,0,0), 2)
    cv2.circle(orig, (int(blbrX), int(blbrY-90)), 5, (255, 0, 0), -1)
    cv2.putText(orig, "({},{})".format(blbrX, blbrY-90), (int(blbrX - 50), int(blbrY - 10) - 20),
            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,0,0), 2)

    # draw lines between the midpoints
    cv2.line(orig, (int(tltrX), int(tltrY)), (int(blbrX), int(blbrY-90)),
             (255, 0, 255), 2)

    # compute the Euclidean distance between the midpoints
    dA = dist.euclidean((tltrX, tltrY), (blbrX, blbrY))
    dB = dist.euclidean((tlblX, tlblY), (trbrX, trbrY))

    cv2.imshow("Image", orig) 

    break

Tags: the图像importboxnpcv2intorig

热门问题