예제 #1
0
파일: ssr.py 프로젝트: EoralMilk/Learning
def ssr_c(img, size):
    img_G = replaceZeroes(cv2.GaussianBlur(img, (size, size), 0))
    img = replaceZeroes(img)
    # img_G = cv2.GaussianBlur(img, (size, size), 0)
    log_S = cv2.log(img / 255.0)
    g_L = cv2.log(img_G / 255.0)
    log_L = cv2.multiply(log_S, g_L)
    log_R = cv2.subtract(log_S, log_L)
    dst_R = cv2.normalize(log_R, None, 0, 255, cv2.NORM_MINMAX)
    R_c = cv2.convertScaleAbs(dst_R)
    return R_c
예제 #2
0
def img_calc(img1, img2, method):
    if method == "add":
        return cv.add(img1, img2)
    elif method == "sub":
        return cv.subtract(img1, img2)
    elif method == "multi":
        return cv.multiply(img1, img2)
    elif method == "divide":
        return cv.divide(img1, img2)
    elif method == "and":
        return cv.bitwise_and(img1, img2)
    elif method == "or":
        return cv.bitwise_or(img1, img2)
    elif method == "not":
        return cv.bitwise_not(img1, img2)
    else:
        return False
예제 #3
0
def PQFT(prev_img, next_img, map_size = 64):
    """
        Computing saliency using phase spectrum of quaternion fourier transform.
        Images are 3 channel.
    """

    new_shape = (int(next_img.shape[1]/(next_img.shape[0]/map_size)), map_size)
    next_img = cv2.resize(next_img, new_shape, cv2.INTER_LINEAR)
    (b, g, r) = cv2.split(next_img)

    # color channels
    R = r-(g+b)/2
    G = g-(r+b)/2
    B = b-(r+g)/2
    Y = (r+g)/2-abs(r-g)/2-b

    red_green = R-G
    blue_yellow = B-Y

    # intensity
    intensity = np.sum(next_img, axis=-1)

    # motion
    prev_img = cv2.resize(prev_img, new_shape, cv2.INTER_LINEAR)
    prev_intensity = np.sum(prev_img, axis=-1)
    movement = abs(intensity-prev_intensity)

    planes = [
        movement.astype(np.float64),
        red_green.astype(np.float64),
    ]
    f1 = cv2.merge(planes)
    f1 = cv2.dft(f1)
    planes = cv2.split(f1)

    magnitude1 = cv2.magnitude(planes[0], planes[1])
    magnitude1 = cv2.multiply(magnitude1, magnitude1)

    planes = [
        blue_yellow.astype(np.float64),
        intensity.astype(np.float64),
    ]

    f2 = cv2.merge(planes)
    f2 = cv2.dft(f2)
    planes = cv2.split(f2)

    magnitude2 = cv2.magnitude(planes[0], planes[1])
    magnitude2 = cv2.multiply(magnitude2, magnitude2)

    magnitude = magnitude1+magnitude2
    magnitude = cv2.sqrt(magnitude)

    planes[0] = planes[0]/magnitude
    planes[1] = planes[1]/magnitude
    f2 = cv2.merge(planes)

    planes = cv2.split(f1)
    planes[0] = planes[0]/magnitude
    planes[1] = planes[1]/magnitude
    f1 = cv2.merge(planes)

    cv2.dft(f1, f1, cv2.DFT_INVERSE)
    cv2.dft(f2, f2, cv2.DFT_INVERSE)

    planes = cv2.split(f1)
    magnitude1 = cv2.magnitude(planes[0], planes[1])
    magnitude1 = cv2.multiply(magnitude1, magnitude1)

    planes = cv2.split(f2)
    magnitude2 = cv2.magnitude(planes[0], planes[1])
    magnitude2 = cv2.multiply(magnitude2, magnitude2)

    magnitude = magnitude1 + magnitude2

    magnitude = cv2.GaussianBlur(magnitude, (5, 5), 8, None, 8)
    saliency = np.zeros((new_shape[0], new_shape[1], 1), np.uint8)
    saliency = cv2.normalize(magnitude, saliency, 0,
                             255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)

    return saliency
    if cv2.waitKey(25) & 0xFF == ord('Q'):
      break
  # Break the loop
  else: 
    break

for i in range(0,420):
    foreground = img1_array[i]
    background = cv2.imread("Blending/girl.jpg")
    alpha = cv2.imread("Blending/mask.png")
    # Convert uint8 to float
    foreground = foreground.astype(float)
    background = background.astype(float)
    # Normalize the alpha mask to keep intensity between 0 and 1
    alpha = alpha.astype(float)/255
    # Multiply the foreground with the alpha matte
    foreground = cv2.multiply(alpha, foreground)
    # Multiply the background with ( 1 - alpha )
    background = cv2.multiply(1.0 - alpha, background)
    # Add the masked foreground and background.
    outImage = cv2.add(foreground, background)
    # Display image
    cv2.imshow("outImg", outImage/255)
    print(i)
    if cv2.waitKey(25) & 0xFF == ord('Q'):
      break
cap.release()

# Closes all the frames
cv2.destroyAllWindows()
예제 #5
0
def multiply_demo(m1, m2):  #乘法
    dst = cv.multiply(m1, m2)
    cv.imshow("multiply result", dst)
예제 #6
0
def multiply_demo(m1, m2):  # 两张图片需要同样大
    dst = cv.multiply(m1, m2)
    cv.imshow("multiply_demo", dst)