# 硬币系列二 | 从照片中自动检测硬币

1. 将图片高斯模糊，消除噪声影响，一般用3x3或者5x5即可。

2. 计算上下左右方向的图像梯度信息（理解为计算当前点和周围点的明暗高低关系即可），这时候，如果这个点左右两边都和该点亮度差异很大，这就证明这个点在图形边缘上，反之，没什么差异证明这个点在一马平川上。

3. 再进行非极大值抑制（把不是最大值的点抑制下去）。对步骤2得到的梯度信息，再观察一个点和周围点的高低关系，对于最大值点保留其值，比他小的点赋予0。

4. 通过双阈值得到最终的边界图像。对上面步骤得到的图像，再次进行判断：给定一个上下界，高于上界的值作为强边缘，低于下界的值为弱边缘，夹在上下界中间的，如果这个点附近一圈存在强边缘，也把这个点作为强边缘。最终只保留强边缘作为最终的边缘图像。

https://www.cnblogs.com/mmmmc/p/10524640.html

img = cv2.imread(apath)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (3, 3), 0)
thresh = cv2.Canny(gray, 10, 100)

_, contours, hierarchy =cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

max_area = 0
for cnt in contours:
x, y, w, h =cv2.boundingRect(cnt)
cv2.rectangle(img,(x, y), (x + w, y + h), (255, 0, 0), 2)
if w*h > max_area and 0.8 < w/h < 1.25:
max_area = w*h
rec_x = x
rec_y = y
rec_w = w
rec_h = h
img = img[rec_y:rec_y+rec_h,rec_x:rec_x+rec_w]

kernel =cv2.getStructuringElement(cv2.MORPH_RECT, (9, 9))
thresh = cv2.dilate(thresh, kernel)
thresh = cv2.erode(thresh, kernel)
closed = cv2.morphologyEx(thresh,cv2.MORPH_CLOSE, kernel, iterations=5)
opened = cv2.morphologyEx(closed,cv2.MORPH_OPEN, kernel, iterations=5)

https://colnect.cn/zh/coins/identify

# reference:https://blog.csdn.net/jamesaonier/article/details/89003053
agentPools = [
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML,like Gecko) Version/5.1.7 Safari/534.57.2",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/39.0.2171.71 Safari/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, likeGecko) Chrome/23.0.1271.64 Safari/537.11",
"Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16(KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101Firefox/34.0",
"Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10)Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10",
"Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208Firefox/2.0.0 Opera 9.50"
]
res = requests.get(index_url,headers=headers)
 

with open('./ip.txt', 'r') as f:
def get_proxy():
#获取IP文本的方法很多，可上网自查
#或去看我的完整工程文件里有一些说明注释
r= random.choice(ip_pool).strip('\n')
proxy = {'https': r}
return proxy
res = requests.get(index_url,proxies=get_proxy(), headers=headers)

posted @ 2020-07-13 19:10  老潘家的潘老师  阅读(9)  评论(0编辑  收藏