OpenCV Test

Just for Private study

import numpy as np
import cv2
from numpy import *


def cv2_imread(file_path, flag=1):
    return cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), flag)


def complement(color):
    return [255 - c for c in color]


if __name__ == "__main__":
    img = cv2_imread("D:R18Rosmontis.jpg")
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            # 获取当前像素点的颜色值
            color = img[i, j].tolist()

            # 转换为补色
            complement_color = complement(color)

            # 将当前像素点的颜色值更新为补色
            img[i, j] = complement_color
    img_flipped = cv2.flip(img, 0)
    cv2.imshow("TEST", img_flipped)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    img2 = cv2_imread("D:R18Rosmontis.jpg")
    if img2 is None:
        print("无法读取图片文件")
    else:
        # cv2.imshow("test-original", img2)
        cv2.waitKey(0)
        cv2.destroyAllWindows()
    cv2.imshow("test-original", img2)
    gray_img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
    #cv2.imshow("test-grayoriginal", gray_img2)
    bright_img = gray_img2 + 50
    bright_img2 = np.clip(bright_img, 0, 255)  # 这里应该就是灰度图片
    bgr_img2 = cv2.cvtColor(bright_img2, cv2.COLOR_GRAY2BGR)

    cv2.imshow("grayimage", gray_img2)
    #cv2.imshow("test-original", img2)
    cv2.imshow("test-brightened", bgr_img2)

    for i in range(bgr_img2.shape[0]):
        for j in range(bgr_img2.shape[1]):
            # 获取当前像素点的颜色值
            color = bgr_img2[i, j].tolist()
            # 转换为补色
            complement_color = complement(color)
            # 将当前像素点的颜色值更新为补色
            bgr_img2[i, j] = complement_color

    cv2.imshow("grayimagecomplement", bright_img2)

    # 将灰度图片转换为BGR格式
    bgr_img_complement = cv2.cvtColor(bright_img2, cv2.COLOR_GRAY2BGR)
    for i in range(bgr_img_complement.shape[0]):
        for j in range(bgr_img_complement.shape[1]):
            color = bgr_img_complement[i, j].tolist()
            complement_color = complement(color)
            bgr_img_complement[i, j] = complement_color
    cv2.imshow("grayimagecomplement-color", bgr_img_complement)
    '''GCCRGB = cv2.cvtColor(bgr_img_complement, cv2.COLOR_BGR2RGB)
    cv2.imshow("FUCKOFF", GCCRGB)
    '''
    # 上面一坨大便没用 不知道为什么 麻了
    # 因为RGB图像变灰度以后就改不回去了,感觉不如原神
    cv2.waitKey(0)
    cv2.destroyAllWindows()


    def hcf(x, y):
        if x > y:
            smaller = y
        else:
            smaller = x
        for i in range(1, smaller + 1):
            if ((x % i == 0) and (y % i == 0)):
                hcf = i
        return hcf

    def average_pooling(img):
        G=maxhcf;
        out = img.copy()
        H, W, C = img.shape
        Nh = int(H / G)
        Nw = int(W / G)
        for y in range(Nh):
            for x in range(Nw):
                for c in range(C):
                    out[G * y:G * (y + 1), G * x:G * (x + 1), c] = np.mean(
                        out[G * y:G * (y + 1), G * x:G * (x + 1), c]).astype(np.int64)
        return out

    # Read image
    img5 = cv2_imread("D:R18Rosmontis.jpg")
    img_0=img5.shape[0]
    img_1=img5.shape[1]
    #print(img_0);print(img_1)
    maxhcf=hcf(img_0,img_1)



    # Average Pooling
    out = average_pooling(img5)

    # Save result
    cv2.imwrite("out.jpg", out)
    cv2.imshow("result", out)
    cv2.namedWindow("result", cv2.WINDOW_NORMAL)
    win_size = cv2.getWindowImageRect("result")[2:4]

    # 计算当前窗口的宽度和高度
    win_w, win_h = win_size[0], win_size[1]

    # 计算原始图像的宽高比和当前窗口的宽高比
    img_w, img_h = out.shape[1], out.shape[0]
    img_ratio = img_w / img_h
    win_ratio = win_w / win_h

    # 根据宽高比缩放图像
    if img_ratio > win_ratio:
        new_w = win_w
        new_h = int(win_w / img_ratio)
    else:
        new_h = win_h
        new_w = int(win_h * img_ratio)
    out_resized = cv2.resize(out, (new_w, new_h))
    cv2.imshow("result", out_resized)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    cv2.waitKey(0)
    cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值