基于python的opencv项目实战笔记(一)—— 图像基本操作

import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
def cv_show(name,img):
    cv.imshow(name,img)
    print(img)#输出各像素点
    print(img.shape)#输出h,w,c
    print(type(img))#输出格式
    print(img.size)#像素点的个数
    print(img.dtype)#数据类型
    cv.waitKey(0)
    cv.destroyAllWindows()
def cv_show1(name,vc):
    #检查打开是否正确
    if vc.isOpened():
        open,frame=vc.read()#第一个参数为True,第二个是这一帧的图像(三维数组)
    else:
        open=False
    while open:
        ret,frame=vc.read()
        if frame is False:
            break
        if ret==True:
            gray=cv.cvtColor(frame,cv.COLOR_BGR2GRAY)#把每一帧转换为灰度图
            cv.imshow(name,gray)
            #waitKey(1)你的计算机处理速度有多快就有多块
            if cv.waitKey(10)&0xFF=='q':#图片等待的时间
                break
    vc.release()
    cv.destroyAllWindows()
def cut_show(name,img):
    img1=img[300:500,100:500]
    cv_show(name,img1)
def cv_merge(b,g,r):
    #合并颜色通道
    img=cv.merge((b,g,r))
    print(img.shape)
def cv_split(img):
    b,g,r=cv.split(img)#颜色通道提取
    print(b)
    print(r)
    print(b.shape)
    print(r.shape)
    cv_merge(b,g,r)
def cv_two(img):
    #只保留R通道
    img2=img.copy()
    img2[:,:,0]=0
    img2[:,:,1]=0
    cv_show('R',img2)
def cv_one(img):
    #只保留G通道
    img2=img.copy()
    img2[:,:,0]=0
    img2[:,:,2]=0
    cv_show('G',img2)
def cv_zero(img):
    #只保留B通道
    img2=img.copy()
    img2[:,:,1]=0
    img2[:,:,2]=0
    cv_show('B',img2)
def cv_padding(img):
    top,bottom,left,right=(50,50,50,50)
    #复制法,复制最边缘像素
    replicate=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_REPLICATE)
    cv_show('replicate',replicate)
    #反射法,fedcba|abcdefgh|hgfedcb
    reflect=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_REFLECT)
    cv_show('reflect',reflect)
    #反射法,gfedcb|abcdefgh|gfedcba
    reflect101=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_REFLECT_101)
    cv_show('reflect101',reflect101)
    #外包装法,cdefgh|abcdefgh|abcdefg
    wrap=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_WRAP)
    cv_show('wrap',wrap)
    #常量法,拿常数值进行填充
    constant=cv.copyMakeBorder(img,top,bottom,left,right,cv.BORDER_CONSTANT,0)
    cv_show('constant',constant)
def cv_count(img):
    img2=img+10
    cv_show('img2',img2)
    #像素相加,如果越界(0,255),例如294,则会自动做取余操作,294%256=38,故为38
    cv_show('img+img2',img2+img)
    #如果越界则取最大值,否则取自身
    img3=cv.add(img,img2)
    cv_show('img3',img3)
def cv_add(img1,img2):
    #如果想让两个图片相加,直接相加shape值可能不同,就比如两个不同型的矩阵无法相加
    img2=cv.resize(img2,(1200,787))#将img2的大小改为(1200,787)
    res=cv.resize(img2,(0,0),fx=1.5,fy=1)#将img2按一定比例放大缩小
    res2=cv.addWeighted(img1,0.4,img2,0.6,0)#z=x1*a+x2*b
    cv_show('res2',res2)
    cv_show('res',res)
    cv_show('img1+img2',img1+img2)
img=cv.imread('D://z.png')#读取图像
img2=cv.imread('D://f.png')
#cv_show('1',img)
#cv_split(img)
#cv_zero(img)
#cv_padding(img)
#cv_count(img)
cv_add(img,img2)
img=cv.imread('D://z.png',cv.IMREAD_GRAYSCALE)#读取灰度图
#cv_show('1',img)
vc=cv.VideoCapture('D://t.mp4')
#cv_show1('t',vc)
#cut_show('2',img)#截取图像
cv.imwrite('D://z1.png',img)#保存图像

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值