python數學公式分割 圖像分割

效果

分割前
原圖
分割後
分割後

代碼

圖像預處理

	# 
	equ = cv2.equalizeHist(gray)
	# 
	gaussian = cv2.GaussianBlur(gray, (3, 3), 0, 0, cv2.BORDER_DEFAULT)
	# 
	median = cv2.medianBlur(gaussian, 5)
	#
	sobel = cv2.Sobel(median, cv2.CV_8U, 1, 0, ksize = 3)
	# 
	ret, binary = cv2.threshold(sobel, 170, 255, cv2.THRESH_BINARY)
	# 
	element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 1))
	element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (9, 7))
	#
	dilation = cv2.dilate(binary, element2, iterations = 1)
	# 
	erosion = cv2.erode(dilation, element1, iterations = 1)
	# 
	dilation2 = cv2.dilate(erosion, element2,iterations = 2)

查找輪廓 計算矩形

region = []
	# 查找輪廓
	_,contours,hierarchy = cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

	# 篩選面積小的
	for i in range(len(contours)):
		cnt = contours[i]
		# # 計算該輪廓的面積
		# area = cv2.contourArea(cnt)

		# 面積小的都篩選掉
		# if (area < 2000):
		# 	continue

		# 輪廓近似,作用很小
		epsilon = 0.001 * cv2.arcLength(cnt,True)
		approx = cv2.approxPolyDP(cnt, epsilon, True)

		# 找到最小的矩形,該矩形可能有方向
		rect = cv2.minAreaRect(cnt)
		# box是四個點的座標
		box = cv2.boxPoints(rect)
		box = np.int0(box)

		# 
		height = abs(box[0][1] - box[2][1])
		width = abs(box[0][0] - box[2][0])
		region.append(box)

保存公式

	for box in region:
		i += 1
		# cv2.drawContours(img, [box], 0, (0, 255, 0), 1)
		
		ys = [box[0, 1], box[1, 1], box[2, 1], box[3, 1]]
		xs = [box[0, 0], box[1, 0], box[2, 0], box[3, 0]]
		ys_sorted_index = np.argsort(ys)
		xs_sorted_index = np.argsort(xs)

		x1 = box[xs_sorted_index[0], 0]
		x2 = box[xs_sorted_index[3], 0]

		y1 = box[ys_sorted_index[0], 1]
		y2 = box[ys_sorted_index[3], 1]

		img_org2 = img.copy()
		img_plate = img_org2[y1:y2, x1:x2]
		cv2.imwrite('temp/number_plate'+str(i)+'.jpg',img_plate)

下載

CSDN下載
Q 919825501

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章