| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | # encoding: utf-8import cv2 as cvimport numpy as npimport randomfrom 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):    passdef 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 Falseclass 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)
 |