python——openCV学习(1)

图像基本操作

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

#图片显示
def cv_show(name,image):
    cv.imshow(name, image)
    cv.waitKey(0)
    cv.destroyAllWindows()
#通道提取与合并
def channels():
    if judge==1:
        image=cv.imread("cat.jpg")
        b, g, r = cv.split(image)
    else:
        image=cv.merge(b,g,r)

#图片基本操作
def picture_work():
    src = cv.imread("cat.jpg")
    cv_show("new", src)
    img = cv.imread("cat.jpg", cv.IMREAD_GRAYSCALE)  ##处理成灰度
    cv_show("one", img)
    cv.imwrite("one.jpg", img)

#视频播放
def video_work():
    #capture=cv.VideoCapture("test.mp4")
    capture=cv.VideoCapture(0)
    if capture.isOpened():
        open=True
    else:
        open=False
    while open:
        ret, frame = capture.read()   #frame是视频中每一帧
        if frame is None:
            break
        if ret == True:
            gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)
            cv.imshow("video", frame)
            cv.imshow("video Q", gray)
            c = cv.waitKey(50)    #停留50毫秒
            if c == 27:
                break

#图片裁剪
def picture_cut():
    img = cv.imread('cat.jpg')
    cat = img[0:200, 0:200]
    cv_show('cat', cat)

#边界填充
def border_fill():
    top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
    img=cv.imread("cat.jpg")
    replicate = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv.BORDER_REPLICATE)
    reflect = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT)
    reflect101 = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_REFLECT_101)
    wrap = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_WRAP)
    constant = cv.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv.BORDER_CONSTANT, value=0)
    plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
    plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')
    plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
    plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')
    plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
    plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')
    plt.show()

#图像融合
def picture_mix():
    dog=cv.imread("dog.jpg")
    cat=cv.imread("cat.jpg")
    dog=cv.resize(dog,(500,414))
    #ps:cv.resize用法2:cv.resize(dog,(0,0).fx=3,fy=1)  #x方向扩大3倍,y方向扩大1倍
    mix=cv.addWeighted(dog,0.6,cat,0.4,0)
    cv_show("new",mix)
    


if __name__=="__main__":
    #picture_work()
    #video_work()
    #picture_cut()
    # border_fill()
    # cat = cv.imread("cat.jpg")
    # print(cat.shape)
    picture_mix()

在这里插入图片描述

waitKey()画面停留时间 。0:任意键退出; 其他数值:毫秒后退出
cv2.IMREAD_COLOR彩色图像
cv2.IMREAD_GRAYSCALE灰度图像
边界填充
BORDER_REPLICATE复制法,也就是复制最边缘像素。
BORDER_REFLECT反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba
BORDER_REFLECT_101反射法,也就是以最边缘像素为轴,对称,gfedcb
BORDER_WRAP外包装法cdefgh
BORDER_CONSTANT常量法,常数值填充。
图像阈值
src输入图,只能输入单通道图像,通常来说为灰度图
dst输出图
thresh阈值
maxval当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
cv2.THRESH_BINARY超过阈值部分取maxval(最大值),否则取0
cv2.THRESH_BINARY_INVTHRESH_BINARY的反转
cv2.THRESH_TRUNC大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INVTHRESH_TOZERO的反转

直方图与模板匹配

cv2.calcHist(images,channels,mask,histSize,ranges)

images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]

channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。

mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如 果你想统图像某一分的直方图的你就制作一个掩模图像并 使用它。

histSize:BIN 的数目。也应用中括号括来

ranges: 像素值范围常为 [0256]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值