我想裁剪一个边缘平滑的图像(最好使用轮廓),并在中间得到关键点。任何帮助都非常感谢。
原始图像:
我试过下面的代码
import cv2 as cv
import numpy as np
img_ref = cv.imread('img.jpeg')
img1 = cv.cvtColor(img_ref, cv.COLOR_BGR2GRAY)
img1_blur = cv.GaussianBlur(img1, (7, 7), cv.BORDER_DEFAULT)
# create mask
thresh, img1_edges1 = cv.threshold(img1_blur, 100, 255, cv.THRESH_BINARY_INV)
# remove noise
img1_edges2 = cv.dilate(img1_edges1, (3, 3), iterations=1)
img1_edges3 = cv.morphologyEx(img1_edges2, cv.MORPH_CLOSE, (7, 7))
mask_img = cv.morphologyEx(img1_edges3, cv.MORPH_OPEN, (7, 7))
# mask the original image
img1_masked = cv.bitwise_and(img_ref, img_ref, mask=mask_img)
# initiate ORB and find the keypoints with SIFT
orb = cv.ORB_create(200)
kp1, des1 = orb.detectAndCompute(img1_masked, None)
img1kp = cv.drawKeypoints(img1_masked, kp1, None, flags=None)
cv.imshow('mask', mask_img)
cv.imshow('key_point', img1kp)
cv.waitKey(0)
遮罩结果(不干净,边缘不平滑):
我已经使用轮廓的面具,但它没有工作。
关键点(所有边缘周围):
先谢了
1条答案
按热度按时间guicsvcw1#
对于裁剪,这种方法已经工作与我的一些图像
和获取关键点(不是边缘周围)已经解决了。我非常感谢你的帮助