【发布时间】:2021-12-03 03:14:52
【问题描述】:
我发现这个article 是这个家伙使用质心旋转了一个鸡蛋图像。 我在 OTSU 图像中找到了质心:
_, thr = cv2.threshold(grayscale, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
moment = cv2.moments(thr)
if moment['m00'] !=0 :
centroid = (int(moment['m10'] / moment['m00']), int(moment['m01'] / moment['m00']))
cv2.circle(result, centroid, 3, (0, 255, 0), -1)
showImage(result, "Centroid")
研究建议使用旋转矩阵使用质心旋转图像:
你能帮我如何使用opencv使用旋转矩阵吗?
这是我目前的方法,最近我找到了质心:
输入图像:
def showImage(img, titulo):
plt.figure(figsize=(5,5))
plt.title(titulo)
plt.imshow(img)
plt.show()
# Segmentar
imagePath = "images/sample1.jpeg"
image = cv2.imread(imagePath)
# convertir de formato BGR a RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
original = image
# Mostrar imagen original
showImage(image, "Imagen Original")
#Aplicar filtro paso bajo (blur)
image = cv2.blur(image,(9,9),0)
# Convertir a HSV:
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Mostrar canal R el cual el huevo presenta mayor contraste
showImage(hsv, "hsv image")
# Convertir escala de grises el hsv
grayscale = cv2.cvtColor(hsv, cv2.COLOR_RGB2GRAY)
showImage(grayscale, "Escala de grises hsv")
# Aplicar binarización OTSU
_, thr = cv2.threshold(grayscale, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
showImage(thr, "OTSU imagen")
# Poner máscara thr a la imágen original
result = cv2.bitwise_and(original, original, mask=thr)
showImage(result, "Imagen segmentada")
# Buscar centroide
moment = cv2.moments(thr)
if moment['m00'] !=0 :
centroid = (int(moment['m10'] / moment['m00']), int(moment['m01'] / moment['m00']))
cv2.circle(result, centroid, 3, (0, 255, 0), -1)
showImage(result, "Centroid")
【问题讨论】:
-
你的问题让我想起了以下post。我认为该解决方案可能适用于您的问题。
-
见en.wikipedia.org/wiki/Image_moment 它用矩来描述旋转的公式
-
感谢亲爱的@Rotem 分享您的工作。 fmw42 也非常感谢分享有关图像时刻的参考。我会的。
标签: python opencv image-processing image-rotation