求图像轮廓的中心点

在图像处理中,通过轮廓矩可以找到图像的中心点。首先读入图像并进行预处理,然后寻找轮廓,使用cv2.moments计算矩,接着根据一阶矩和零阶矩的比例确定横轴和纵轴的中心点坐标,最后在图像上标注出中心点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在图像处理中,当找出一个图像轮廓后,可通过轮廓矩的方法求出图像的中心点。具体步骤如下:

(1)读入图像并进行预处理;

(2)对预处理后的图像进行轮廓的绘制;

(3)通过M=cv2.moments()函数对绘制好的轮廓求矩;返回值有零阶矩(m00)、一阶矩  (m01和m10)等;

(4)求轮廓的中心点

         横轴中心点(center_x, image.shape[0]//2)。

         其中:center_x = int(M["m10"] / M["m00"]);因为标出中心点时,要求点坐标为整数,所以此处需取整。

        M["m10"]是指关于x轴的一阶几何矩,它表示了图像区域内所有像素的x坐标之和。M["m00"]是指零阶几何矩,它表示了图像区域内的像素总数,当对图像进行二值化等预处理之后,它就表示了图像区域的面积。

        image.shape[0]//2为图像轮廓高度的一半。

         纵轴中心点( image.shape[1]//2,center_y )。

         其中:center_y = int(M["m01"] / M["m00"]);

        M["m01"]是指关于y轴的一阶几何矩,它表示了图像区域内所有像素的y坐标之和。M["m00"]同上。

        image.shape[1]//2为图像轮廓宽度的一半。

下述代码可在图像上标出横轴中心点。

import cv2
import numpy as np

image = cv2.imread(img.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
contours, _ = cv2.findContours(blurred, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contour = contours[0] # 假设只有一个轮廓
M = cv2.moments(contour)
center_x = int(M["m10"] / M["m00"])
print(center_x )
imgx_circle=cv2.circle(image, (center_x, image.shape[0]//2), 5, (0, 0, 255), -1)
imgx_resized=cv2.resize(imgx_circle, (0, 0), fx=1/2, fy=1/2)
cv2.imshow('image', imgx_resized)
cv2.waitKey(0)
cv2.destroyAllWindows()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值