| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- #coding=utf-8
 
- '''颜色串色检测'''
 
- import cv2 as cv
 
- import numpy as np
 
- #裁剪图片
 
- def cutImage(img_addr):
 
-     img = cv.imread(img_addr)
 
-     img_arr = np.array(img)
 
-     hight = img_arr.shape[0]
 
-     wight = img_arr.shape[1]
 
-     dest_img = img_arr[hight/2+20:hight,0:wight,:]
 
-     return dest_img
 
- #得到横坐标点
 
- def getSpot(dest_img):
 
-     edge_img_rgb  = cv.convertScaleAbs(cv.Sobel(dest_img,cv.CV_16S,1,0))
 
-     edge_img_gray = cv.cvtColor(edge_img_rgb,cv.COLOR_BGR2GRAY)
 
-     _,edge_img = cv.threshold(edge_img_gray,50,255,cv.THRESH_BINARY)
 
-     #做一条水平线
 
-     tumple1=[]
 
-     tumple = []
 
-     for y in range(0,edge_img.shape[1],1):
 
-         if edge_img[70][y] == 255:
 
-             tumple1.append(y)
 
-             tumple.append(y)
 
-     count = 0
 
-     for i in range(0,len(tumple1)):
 
-         if i != len(tumple1)-1:
 
-             if tumple1[i+1] - tumple1[i]>15:
 
-                 if count == 0:
 
-                     tumple.insert(i+1,".")
 
-                 else :
 
-                     tumple.insert(count+i+1,".")
 
-                 count= count +1
 
-     tumple.insert(len(tumple),".")
 
-     lines =[]
 
-     recode = 0
 
-     for i in range(0,len(tumple),1):
 
-         if tumple[i] == "." :
 
-             if recode == 0:
 
-                 temp_arr = tumple[recode:i]
 
-                 recode = i
 
-             else:
 
-                 temp_arr = tumple[recode+1:i]
 
-                 recode = i
 
-             lines.append(sum(temp_arr)/len(temp_arr))
 
-     return lines
 
- #输入图片地址,返回拆分图片
 
- def  getPartImage(img_addr):
 
-     dest_img = cutImage(img_addr)
 
-     lines = getSpot(dest_img)
 
-     images = []
 
-     for i in range(0,len(lines)):
 
-         if i ==0:
 
-             images.append(dest_img[0:dest_img.shape[0],0:lines[i]-5,:])
 
-         else:
 
-             if i == len(lines)-1:
 
-                 images.append(dest_img[0:dest_img.shape[0],lines[i]+5:dest_img.shape[1]-5,:])
 
-             images.append(dest_img[0:dest_img.shape[0],lines[i-1]+5:lines[i]-5,:])
 
-     return images
 
- # 对外提供方法
 
- def cmpPicTotal(picpath1):
 
-     images = getPartImage(picpath1)
 
-     if len(images) != 8:
 
-         print "彩色分离异常"
 
-     else:
 
-         for image in images:
 
-             wight = image.shape[1]
 
-             hight = image.shape[0]
 
-             B, G, R = cv.split(image)
 
-             sum_B = 0
 
-             sum_G = 0
 
-             sum_R = 0
 
-             for x in range(0, hight, 1):
 
-                 for y in range(0, wight, 1):
 
-                     sum_B = sum_B + B[x][y]
 
-                     sum_G = sum_G + G[x][y]
 
-                     sum_R = sum_R + R[x][y]
 
-                     avg_B = sum_B / (wight * hight)
 
-                     avg_G = sum_G / (wight * hight)
 
-                     avg_R = sum_R / (wight * hight)
 
-             for x in range(0, hight, 1):
 
-                 for y in range(0, wight, 1):
 
-                     if abs(image[x][y][0] - avg_B)>20 or abs(image[x][y][1] - avg_G) >20 or abs(image[x][y][2] -avg_R) >20:
 
-                         return False
 
-                     else:
 
-                         return True
 
 
  |