opencv入门---opencv 3

图像亮度和对比对操作

import numpy as np
import cv2 as cv


def light_constrat_demo():
    src = cv.imread("./mm.jpg")
    h, w = src.shape[:2]
    empty = np.zeros((h // 2, w // 2, 3), src.dtype)
    src = cv.resize(src, (w // 2, h // 2), interpolation=cv.INTER_CUBIC)
    constast = np.zeros((h // 2, w // 2, 3), np.float32)
    constast.fill(0.8)
    cv.imshow("input", src)

    empty.fill(0)  # 提高亮度
    cv.imshow("em", empty)
    print(empty.shape, src.shape)
    dst = cv.add(src, empty)
    cv.imshow("dst", dst)
    new = cv.add(cv.multiply(np.float32(src), constast), np.float32(empty))
    cv.imshow("new", np.uint8(new))

    # API
    finnal = cv.addWeighted(src, 1.2, empty, 0, 20)
    cv.imshow("finna;", finnal)
    cv.imwrite("./new_wife.jpg", finnal)


def do_nothing():
    pass


def track_linght():
    """
    加入滑块
    :return:None
    """
    src = cv.imread("./mm.jpg")
    h, w = src.shape[:2]
    src = cv.resize(src, (w // 2, h // 2), interpolation=cv.INTER_CUBIC)
    empty = np.zeros(src.shape, src.dtype)
    cv.namedWindow("reslut", cv.WINDOW_AUTOSIZE)
    # cv.imshow("input", src)
    cv.createTrackbar("contrast", "reslut", 0, 100, do_nothing)
    cv.createTrackbar("light","reslut",0,100,do_nothing)
    while True:
        cnt = cv.getTrackbarPos("contrast", "reslut") / 50
        light=cv.getTrackbarPos("light","reslut")/3
        dst = cv.addWeighted(src, cnt, empty, light, light)
        cv.imshow("reslut", dst)
        c = cv.waitKey(20)
        if c == 27:
            break


if __name__ == '__main__':
    track_linght()
    cv.waitKey(0)
    cv.destroyAllWindows()

在这里插入图片描述
加入了滑块

图像差值

import numpy as np
import cv2 as cv


def resize_demo():
    src = cv.imread("./3.jpg")
    cv.imshow("src", src)
    h, w = src.shape[:2]
    print(h, w)
    det = cv.resize(src, (w // 3, h // 3), interpolation=cv.INTER_LINEAR)  # (w//2,h//2)宽高都缩小二分之一, interpolation插值方法
    cv.imshow("de", det)
    da = cv.resize(src, (w * 2, h * 2), interpolation=cv.INTER_CUBIC)  # 三次差值放大把他放大,ps所用的方法
    cv.imshow("da", da)


if __name__ == '__main__':
    resize_demo()
    cv.waitKey(0)
    cv.destroyAllWindows()

在这里插入图片描述
图像缩放的时候需要差值不然会有锯齿

图像旋转

import numpy as np
import cv2 as cv
import math


def ratate_demo():
    src = cv.imread("./3.jpg")
    cv.imshow("input", src)
    dst = cv.rotate(src, rotateCode=cv.ROTATE_90_CLOCKWISE)  # rotateCode可以设置旋转角度
    cv.imshow("dst", dst)

    h, w, ch = src.shape
    ch = h // 2
    cw = w // 2
    M = cv.getRotationMatrix2D((ch, cw), 45, 1.0)  # (ch, cw)是中心点,45是旋转的度数,1.0是放大缩小倍数
    dst = cv.warpAffine(src, M, (h, w))
    cv.imshow("dst2", dst)


if __name__ == '__main__':
    ratate_demo()
    cv.waitKey(0)
    cv.destroyAllWindows()

在这里插入图片描述

#图像算术运算

import numpy as np
import cv2 as cv


def suanshu_demo():
    src1 = cv.imread("./sum.jpg")
    src2 = cv.imread("./mm.jpg")
    h, w = src2.shape[:2]
    src2 = cv.resize(src2, (w // 2, h // 2), interpolation=cv.INTER_CUBIC)
    src1 = cv.resize(src1, (w // 2, h // 2), interpolation=cv.INTER_CUBIC)#将两张图片调整成一样的大小
    cv.imshow("zz", src2)
    cv.imshow("sum", src1)

    #两张图片相加
    src2=cv.add(src2,src2)

    new_image=cv.add(src2,src1)
    new_image=cv.add(new_image,src2)

    cv.imshow("new",new_image)
    cv.imwrite("wife.jpg",new_image)
    new=cv.subtract(src1,src2)
    new=cv.add(new,new_image)
    cv.imshow("nn",new)
    data=cv.multiply(src1,src2)
    data=cv.add(data,src2)
    cv.imshow("data",data)


if __name__ == '__main__':
    suanshu_demo()
    cv.waitKey(0)
    cv.destroyAllWindows()

其实就是图像的加减乘除操作
在这里插入图片描述
女生照片和卡通太阳照片相加的结果

图像的逻辑运算

import numpy as np
import cv2 as cv


def logic_operator():
    src1 = np.zeros((400, 400, 3), dtype=np.uint8)
    src2 = np.zeros((400, 400, 3), dtype=np.uint8)
    cv.rectangle(src1, (100, 100), (300, 300), (255, 0, 255), -1, cv.LINE_8)
    cv.rectangle(src2, (20, 20), (220, 220), (255, 255, 0), - 1, cv.LINE_8)
    cv.imshow("1", src1)
    cv.imshow("2", src2)

    src3 = cv.bitwise_and(src1, src2)
    cv.imshow("3", src3)
    src4 = cv.bitwise_or(src1, src2)
    cv.imshow("4", src4)


if __name__ == '__main__':
    logic_operator()
    cv.waitKey(0)
    cv.destroyAllWindows()

在这里插入图片描述

色彩空间

常用的是RGB和HSV色彩空间,包括我们常用的灰度图像都算是一种色彩空间。

如果是图像色彩比较鲜艳我们想去用这些颜色去分割背景或者物体的画,我们就可以把RGB图像转换成HSV图像。
hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
然后查看HSV的表去取最大最小值
mask = cv.inRange(hsv, (35, 43, 46), (77, 255, 255))
将mask取反

cv.bitwise_not(mask, dst=mask)

相加操作

 dst = np.zeros(src.shape, src.dtype)
 re = cv.add(src, dst, mask=mask)

以上就实现了神奇的扣绿

在这里插入图片描述

这是HSV色彩空间的图像

在这里插入图片描述

代码

import numpy as np
import cv2 as cv


def color_space_demo():
    src = cv.imread("./2.png")
    h, w = src.shape[:2]
    # src = cv.resize(src, (w // 2, h // 2), interpolation=cv.INTER_CUBIC)
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
    cv.imshow("input", src)
    hsv = cv.cvtColor(src, cv.COLOR_BGR2HSV)
    cv.imshow("hh", hsv)
    dst = np.zeros(src.shape, src.dtype)
    mask = cv.inRange(hsv, (35, 43, 46), (77, 255, 255))
    # cv.cvtColor(mask, cv.COLOR_HSV2BGR_FULL)
    cv.imshow("maks", mask)
    cv.bitwise_not(mask, dst=mask)
    re = cv.add(src, dst, mask=mask)
    cv.imshow("re", re)


if __name__ == '__main__':
    color_space_demo()
    cv.waitKey(0)
    cv.destroyAllWindows(

图像的像素统计

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt


def statistics():
    src = cv.imread("./mm.jpg")
    h, w = src.shape[:2]
    src = cv.resize(src, (w // 2, h // 2), interpolation=cv.INTER_CUBIC)
    cv.imshow("src", src)

    mbgr = cv.mean(src)  # rgb的平均值
    # cv.imshow("mean", mbgr)
    print("b%d,g%d,r%d" % (mbgr[0], mbgr[1], mbgr[2]))

    std = cv.meanStdDev(src)  # 方差值

    # 绘制图像灰度直方图
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    cv.imshow("hui", gray)
    hist = np.zeros([256], dtype=np.int32)
    for row in range(h):
        for col in range(w):
            pv = gray[row, col]
            hist[pv] += 1
    plt.plot(hist, color="r")
    plt.xlim([0, 600])
    plt.show()


if __name__ == '__main__':
    statistics()
    cv.waitKey(0)
    cv.destroyAllWindows()

author: [email protected] 欢迎交流

猜你喜欢

转载自blog.csdn.net/qq_34788903/article/details/83819032