| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | 
							- # encoding: utf-8
 
- import cv2 as cv
 
- import numpy as np
 
- import random
 
- from ssat_sdk.picture.RGB import RGBColor
 
- '''
 
- 用于图片初级检测,例如:颜色、噪声
 
- 此类已经废弃
 
- '''
 
- def getMaxRGB(imgFile,area):
 
-     img = cv.imread(imgFile,1)
 
-     if (area is None):
 
-         area = (0,0,img.shape[1], img.shape[0])#mat shape:高、宽、颜色值个数
 
-     img = cv.cvtColor(img,cv.COLOR_BGR2RGB)
 
-     img = np.array(img)
 
-     if len(area) == 4:
 
-         rgbColor = RGBColor()
 
-         x1 = area[0]
 
-         y1 = area[1]
 
-         x2 = area[2]
 
-         y2 = area[3]
 
-         img = img[y1:y2+1,x1:x2+1]
 
-         return rgbColor.getMaxBGR(img)
 
-     else:
 
-         return None,None,None
 
- '''
 
- 截取图片区域RGB平均值。
 
- :param area:二维区域。坐标系:x轴:水平向右,y轴:纵向向下
 
- '''
 
- def getAverageRGB(img_addr, area = None):
 
-     img = cv.imread(img_addr)
 
-     return getImgAverageRGB(img, area)
 
- '''
 
- 截取图片区域RGB平均值。
 
- :param area:二维区域。坐标系:x轴:水平向右,y轴:纵向向下
 
- '''
 
- def getImgAverageRGB(img, area):
 
-     if (area is None):
 
-         area = (0,0,img.shape[1], img.shape[0])#mat shape:高、宽、颜色值个数
 
-     print "getImgAverageRGB", img.shape, area
 
-     # print img.shape
 
-     img = cv.cvtColor(img,cv.COLOR_BGR2RGB)
 
-     img = np.array(img)
 
-     if len(area) == 4:
 
-         rgbColor = RGBColor()
 
-         x1 = area[0]
 
-         y1 = area[1]
 
-         x2 = area[2]
 
-         y2 = area[3]
 
-         img = img[y1:y2, x1:x2]
 
-         return rgbColor.getAvgBGR(img)
 
-     else:
 
-         return None, None, None
 
- '''@废弃'''
 
- # 判断黑屏
 
- def isBlack(img_addr, black_th=15):
 
-     gray = cv.imread(img_addr,0)
 
-     width = gray.shape[1]
 
-     hight = gray.shape[0]
 
-     for i in range(0,50):
 
-         random_y = random.randint(0,width-1)
 
-         random_x = random.randint(0,hight-1)
 
-         if gray[random_x][random_y] >= black_th:
 
-             return False
 
-         else:
 
-             continue
 
-     return True
 
-  #判断噪点
 
- def hasNoise(img_addr):
 
-     pass
 
- def getPoints(img_addr):
 
-     kernel = np.ones((11, 11), dtype=np.uint8)
 
-     img = cv.imread(img_addr, 1)
 
-     gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
 
-     gray = gray[gray.shape[0]/2:gray.shape[0],gray.shape[1]/2:gray.shape[1]]
 
-     x = cv.Sobel(gray, cv.CV_16S,1, 0)
 
-     y = cv.Sobel(gray, cv.CV_16S, 0, 1)
 
-     absX = cv.convertScaleAbs(x)   # 转回uint8
 
-     absY = cv.convertScaleAbs(y)
 
-     dst = cv.addWeighted(absX, 0.5, absY, 0.5,0)
 
-     _, dst_2 = cv.threshold(dst, 100, 255, cv.THRESH_BINARY)
 
-     img_close = cv.erode(cv.dilate(dst_2, kernel), kernel)
 
-     image, contours, hierarchy = cv. findContours(img_close, 1, 2)
 
-     true_rectang = []
 
-     for i in range(0,len(contours)):
 
-         rectang = []
 
-         temp_arr = []
 
-         for j in range(0,len(contours[i])):
 
-             for points_index in range(0, len(contours[i][j])):
 
-                 temp_arr.append(contours[i][j][0])
 
-         for temp_arr_index in range(0, len(temp_arr)):
 
-             if temp_arr_index == 0:
 
-                 # 第一个点加入数组
 
-                 rectang.append(temp_arr[temp_arr_index])
 
-             else:
 
-                 # 遍历所有点
 
-                 flag = 0
 
-                 for rectang_index in range(0, len(rectang)):
 
-                     if (abs(temp_arr[temp_arr_index][0]-rectang[rectang_index][0]) >= 15) or (abs(temp_arr[temp_arr_index][1]-rectang[rectang_index][1]) >= 15):
 
-                        flag = flag + 1
 
-                     if flag == len(rectang):
 
-                         rectang.append(temp_arr[temp_arr_index])
 
-         if len(rectang) == 4:
 
-             # 判断是否我们需要的矩形 ,如果是 则返回到true_rectang
 
-             true_rectang.append(rectang)
 
-     return true_rectang
 
- '''
 
- @废弃
 
- 判断马赛克
 
- '''
 
- def hasMosaic(std_pic,test_pic,num):
 
-     std_pic = getPoints(std_pic)
 
-     test_pic = getPoints(test_pic)
 
-     print len(std_pic)
 
-     print len(test_pic)
 
-     if len(test_pic) != len(std_pic):
 
-         return True
 
-     else:
 
-         return False
 
- class PreImageJudge():
 
-     def __init__(self):
 
-         self.BGR = RGBColor()
 
-     '''
 
-     判断一张图片是否是纯黑图片。
 
-     :param img:需要判断的图片
 
-     :param grayTH : 黑色判断的灰阶阈值
 
-     :param splitCount: 图片拆分的行列次数
 
-     :param expTh:黑色计算的容错区域比例。
 
-     '''
 
-     def isBlack(self, img, grayTH = 70,splitCount=10, expTh = 0.01):
 
-         return self.BGR.isBlack()
 
- if __name__ == '__main__':
 
-     print hasMosaic('std.jpg','test.jpg',num=None)
 
 
  |