20 回复
有没有思路和相关模块推荐
import cv2
import numpy as np
def find_image_center(image_path):
"""
找出图像的中心点坐标
参数:
image_path: 图像文件路径
返回:
center_x, center_y: 图像中心点坐标
"""
# 读取图像
img = cv2.imread(image_path)
if img is None:
raise ValueError(f"无法读取图像: {image_path}")
# 获取图像尺寸
height, width = img.shape[:2]
# 计算中心点坐标
center_x = width // 2
center_y = height // 2
return center_x, center_y
def find_contour_center(image_path):
"""
找出图像中主要轮廓的中心点(质心)
参数:
image_path: 图像文件路径
返回:
centroid_x, centroid_y: 轮廓质心坐标
"""
# 读取图像并转为灰度图
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if not contours:
return None
# 找到最大轮廓
largest_contour = max(contours, key=cv2.contourArea)
# 计算轮廓的矩
M = cv2.moments(largest_contour)
# 计算质心
if M["m00"] != 0:
centroid_x = int(M["m10"] / M["m00"])
centroid_y = int(M["m01"] / M["m00"])
return centroid_x, centroid_y
return None
# 使用示例
if __name__ == "__main__":
# 方法1:获取图像几何中心
center_x, center_y = find_image_center("your_image.jpg")
print(f"图像几何中心: ({center_x}, {center_y})")
# 方法2:获取轮廓质心
centroid = find_contour_center("your_image.jpg")
if centroid:
print(f"轮廓质心: {centroid}")
else:
print("未找到有效轮廓")
核心解释:
-
几何中心:直接用图像宽高计算
(width//2, height//2),这是最简单的中心点定义。 -
轮廓质心:通过OpenCV的
findContours找到图像中的物体轮廓,再用moments计算轮廓的质心。这更适合识别不规则物体的中心。
选择建议:
- 用几何中心处理规则图像,用轮廓质心处理不规则物体。
先识别出轮廓,然后求轮廓点集的中心坐标?是这个意思吗?
擦!竟然还有图片,回复完了图片才载入。。。
红色这么明显的,直接按 rgb 通道处理应该就行吧
聚类,然后取平均,可以拿到重心,中点大概在图像外围包一层再求吧
红点明显是为了示例的 - -
Rgb 图像直接转成 hsv,然后提取出轮廓。然后找到质心,完成
孤立这个老实人
轮廓 矩形的中心点 就是了
还是这个方法 6666
提供个思路,转化成灰度,或者降维,然后 sklearn 聚类
opencv
谷歌一下,你就知道
这个我做过。是为了把 QQ 游戏大厅的找茬游戏的图片中不同处标出来,
也是图片中分成了好几块,要找出各个块的中心点。
据类算法有好多种,要选一个合适的,否则有一些异形的会聚类歪。
你还可以试试分水岭算法,就是先把这几块切分开来。
是我审题不清了,。尬。换我拿到这种问题,就是搞几个示例图片,打开 matlab 和 google 一把梭看感觉先试几个方法,阈值过滤,二值化,最大联通区域然后求重心什么的
刚开始没找到图片上传选项,所以放到其他服务器了,就是找到图片红点范围坐标
是的就是找茬游戏
已经实现,用的 opencv 先灰度模糊,再二值化,找到图形轮廓最后确定中心点



