gpt4 book ai didi

python - 计数齿轮(Python,OpenCV)

转载 作者:行者123 更新时间:2023-12-02 17:08:55 27 4
gpt4 key购买 nike

对于原型(prototype),我需要构建一个齿轮的 3d 模型。这有“许多”数量的 dentry 。
所以我试图用 OpenCV 和 Python 来计算它们。我找到了this (仅?)帖子解释了如何在 C++ 中执行此操作。

我正在遵循这些步骤,现在这是我制作的代码。

import numpy as np
import cv2

img = cv2.imread('C:\\Users\\Link\\Desktop\\gear.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)

kernel = np.ones((3, 3), np.uint8)

img_erosion = cv2.erode(thresh, kernel, iterations=1)

edges = cv2.Canny(img_erosion, 50, 150)

img_dilate = cv2.dilate(edges, kernel, iterations=1)

cv2.imshow('i', thresh)
cv2.waitKey(0)
cv2.imshow('i', img_erosion)
cv2.waitKey(0)
cv2.imshow('i', edges)
cv2.waitKey(0)
cv2.imshow('i', img_dilate)
cv2.waitKey(0)

阻止我继续前进的是:图像在某些时候变得一团糟。

这是我正在处理的原件:

src

这是 image_dilate 的输出

o1

如您所见,底部的 dentry 没有正确显示,可能是因为原始图像中的阴影。我怎样才能摆脱这个?

最佳答案

因为你的源图片是清洁工比链接你的帖子,所以你可以在最大面积轮廓上做大约 ,然后 获得一半的点数 ,结果为 84 .

enter image description here

示例代码:

#!/usr/bin/python3
# 2018.01.22 11:53:24 CST
import cv2
import myutils

## Read
img = cv2.imread("img13_2.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## threshold and find contours
ret, threshed = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY_INV)
cnts= cv2.findContours(threshed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)[-2]

## Find the max-area-contour
cnt = max(contours, key=cv2.contourArea)

## Approx the contour
arclen = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.002*arclen, True)

## Draw and output the result
for pt in approx:
cv2.circle(img, (pt[0][0],pt[0][1]), 3, (0,255,0), -1, cv2.LINE_AA)

msg = "Total: {}".format(len(approx)//2)
cv2.putText(img, msg, (20,40),cv2.FONT_HERSHEY_PLAIN, 2, (0,0,255), 2, cv2.LINE_AA)

## Display
cv2.imshow("res", img);cv2.waitKey()

结果:

enter image description here

关于python - 计数齿轮(Python,OpenCV),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48371199/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com