这是一次数学建模用到的图像识别代码,是关于python的opencv库的使用,在使用之前请安装opencv库。

下面是代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def modify_picture1(filename,n):
image = cv2.imread(filename)
image = image[111:326,45:314] #图像中你所要取的特征图像部分
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) #将图片转化为灰度
gradX = cv2.Sobel(gray, ddepth=cv2.CV_32F,dx=1,dy=0,ksize=-1)
gradY = cv2.Sobel(gray, ddepth=cv2.CV_32F, dx=0, dy=1, ksize=-1)
gradient = cv2.subtract(gradX, gradY)
gradient = cv2.convertScaleAbs(gradient) #用sobel边缘检测算法,
blurred = cv2.blur(gradient,(9,9)) #这个是设置的滤波,也就是卷积核
(_, thresh) = cv2.threshold(blurred, 80, 255, cv2.THRESH_BINARY) #将图像二值化
closed = cv2.erode(thresh, None, iterations=3)
closed = cv2.dilate(closed, None, iterations=3) #形态学腐蚀膨胀去掉图像的干扰项
z = (n-55)*4.25 #根据原图比例计算z轴的值
for i in range (215): #输出二值化的图像中的白色部分的坐标,即具体的特征部分
for j in range(269):
if closed[i,j]==255:
f.writelines('%i,%i\n' % (i+111, j+45))