zoukankan      html  css  js  c++  java
  • opencv-python图像处理基础(一)



    #一.读取图像数据
    import  cv2 
    
    img=cv2.imread("d:/image0.JPG")   #读取图片数据
    print(img)
    cv2.imshow('image',img)       #显示窗口数据
    cv2.waitKey(0)                #等待延迟
    cv2.destroyAllWindows()



    print(img) #打印像素值通道

     从这个结果可以出:现在每个像素都由一个三元素组表示,并且每个整型(integer)向量

    分别表示一个B,G,R通道。其他色彩空间(如hsv)也以同样地方式来表示像素,只是取值范围和通道数目不同
    (例如,hsv)

    print(img.shape)#打印通道

    读取图像处理

    cv2.IMREAD_COLOR:彩色图像

    cv2.IMREAD_GRAYSCALE:灰度图像

     灰度图像处理

    import  cv2 as cv
    import numpy as np
    
    img1=cv.imread("d:/image0.JPG",cv.IMREAD_GRAYSCALE)   #读取灰图片数据
    print(img1)
    print(img1.shape)
    cv.imshow('image',img1)       #显示窗口数据
    cv.waitKey(0)                #等待延迟
    cv.destroyAllWindows()

    结果可以和色彩图像对比

    二,数据读取-视频

    cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。

    如果是视频文件,直接指定好路径即可。

    import  cv2 
    vc=cv2.VideoCapture(0)  #打开摄像头
    if vc.isOpened():             #判断摄像头状态
        open ,frame=vc.read()
    else:
        open=False
    while open:
        ret,frame=vc.read()    #frame帧率
        if frame is None:
            break
        if ret==True:
            gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰色处理
            cv2.imshow("result",gray)
        if cv2.waitKey(10)& 0xFF==27:
    break

    vc.release()
    cv2.destroyAllWindows()

    读取摄像头并且设置为灰色模式

    剪切图像

    import cv2
    img=cv2.imread("d:/image0.JPG")
    flower=img[0:200,0:200]           #剪切图像
    cv2.imshow('image',flower)       #显示窗口数据
    cv2.waitKey(0)                #等待延迟
    cv2.destroyAllWindows()

     颜色通道地提取只保留r通道

    import cv2
    img=cv2.imread("d:/image0.JPG")
    b,g,r=cv2.split(img)
    print(b)
    #只保留b结果
    cur_img=img.copy()
    cur_img[:,:,0]=0
    cur_img[:,:,1]=0
    cv2.imshow('image',cur_img)       #显示窗口数据
    cv2.waitKey(0)                #等待延迟
    cv2.destroyAllWindows()

      颜色通道地提取只保留g通道

    import cv2
    img=cv2.imread("d:/image0.JPG")
    b,g,r=cv2.split(img)
    print(b)
    #只保留b结果
    cur_img=img.copy()
    cur_img[:,:,0]=0
    cur_img[:,:,2]=0
    cv2.imshow('image',cur_img)       #显示窗口数据
    cv2.waitKey(0)                #等待延迟
    cv2.destroyAllWindows()

       颜色通道地提取只保留b通道

    import  cv2
    img=cv2.imread("d:/image0.JPG")
    b,g,r=cv2.split(img)
    print(b)
    #只保留b结果
    cur_img=img.copy()
    cur_img[:,:,1]=0
    cur_img[:,:,2]=0
    cv2.imshow('image',cur_img)       #显示窗口数据
    cv2.waitKey(0)                #等待延迟
    cv2.destroyAllWindows()

     边界填充

    BORDER_REPLICATE:复制法,也就是复制最边缘像素。

    BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb

    BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba

    BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg

    BORDER_CONSTANT:常量法,常数值填充。

    import cv2
    import matplotlib.pyplot as plt
    img=cv2.imread("d:/cat.JPG")
    top_size,bottom_size,left_size,right_size = (50,50,50,50)
    
    replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)
    reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)
    reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
    wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
    constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.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()

    数值计算

    import cv2
    img=cv2.imread("d:/image0.JPG")
    img_flower=img+10 #所有通道数值+10
    print(img[:5,:,0])
    print(".........................")
    print(img_flower[:5,:,0])
    

     

     当数值超过256时会以%256地形式展示通道数据

    print(".........................")
    print((img_flower+img)[:5,:,0])

     

     
  • 相关阅读:
    各种协议与HTTP协议之间的关系
    在浏览器中输入url地址到显示主页的过程
    TCP 协议如何保证可靠传输
    TCP,UDP 协议的区别
    TCP 三次握手和四次挥手
    OSI与TCP/IP各层的结构与功能,用到的协议
    424. 替换后的最长重复字符
    webstorm快捷键
    S1:动态方法调用:call & apply
    S1:原型继承
  • 原文地址:https://www.cnblogs.com/xujunjia/p/11440589.html
Copyright © 2011-2022 走看看