案例01
- 例01
- 1.1 目标
- 1.2 步骤
- 1.3 代码
例01
1.1 目标
找出图形中的圆弧。
1.2 步骤
- 读入图像。彩色图转灰度图。
- 图像处理。读灰度图阈值分割,得到img_thre,除掉图中的蓝色和绿色,只留下白色。对img_thre做水平梯度得到gx,这样除去图像中的横线。再对gx求轮廓,根据轮廓面积得到圆弧的索引。求出两个圆弧的外接矩形,画出外接矩形。
- 显示图像。
1.3 代码
## 1. 读入图像
img = cv2.imread("EXAMPLES/缺陷检测/p_test_01.jpeg",1)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
## 2. 图像处理
_, img_thre = cv2.threshold(img_gray,200,255,cv2.THRESH_BINARY)
gx = cv2.Sobel(img_thre,-1,1,0,None,11)
plt.imshow(gx,'gray')
cnts ,_ = cv2.findContours(gx,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)
areas = []
for i in cnts:
areas.append(cv2.contourArea(i))
o = img.copy()
idx = np.argsort(areas)[::-1]
for i in idx[:2]:
x, y, w, h = cv2.boundingRect(cnts[i])
brcnt = np.array([[[x, y]], [[x + w, y]], [[x + w, y + h]], [[x, y + h]]])
cv2.drawContours(o, [brcnt], -1, (255, 0, 255), 3)
## 3. 显示图像
plt.subplot(151)
plt.axis('off')
plt.imshow(img)
plt.subplot(152)
plt.axis('off')
plt.imshow(img_gray,'gray')
plt.subplot(153)
plt.axis('off')
plt.imshow(img_thre,'gray')
plt.subplot(154)
plt.axis('off')
plt.imshow(gx,'gray')
plt.subplot(155)
plt.axis('off')
plt.imshow(o)