繁体   English   中英

使用旋转矩阵基于质心旋转图像

[英]Rotate image based in centroid using the rotation matrix

我发现这篇文章是这些家伙使用质心旋转了一个鸡蛋图像。 我在 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")

您可以使用 OpenCV 中的warpAffinewarpPerspective等变形函数。 看来, warpAffine (仿射变换)对于您的应用程序来说已经足够了。 无论如何,您可以简单地使用以下代码:

Point center = Point( image.cols/2, image.rows/2 );
Mat rot_mat = getRotationMatrix2D( center, angle, scale ); // rot_mat is 2x3 double matrix), you can set scale=1
Mat warp_rotate_dst;
warpAffine( image, warp_rotate_dst, rot_mat, image.size());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM