美文网首页
2019-04-02 OpenCV学习

2019-04-02 OpenCV学习

作者: 毛十三_ | 来源:发表于2019-04-07 21:05 被阅读0次

01显示图片

import cv2 as cv
src = cv.imread("2.jpg")  #读取图片
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE) #创建窗口
cv.imshow("input image",src)
cv.waitKey(0)
cv.destroyAllWindows()

02图像加载与保存

图像属性:通道数目 高与宽 像素数据 图像类型

import cv2 as cv
def get_image_info(image):
    print(type(image))
    print(image.shape)
    print(image.size)
    print(image.dtype)

print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
get_image_info(src)
cv.waitKey(0)

cv.destroyAllWindows()

输出结果

=====Hello Python=====
<class 'numpy.ndarray'>   #读出来的数据类型
(1000, 667, 3)
2001000
uint8 #每个像素点有三个信道,每个信道所占位数是无符号int8位

读取视频

import cv2 as cv

def Video_demo():
    capture = cv.VideoCapture(0) #打开摄像头
    while(True):
        ret , frame = capture.read() #frame就是视频中的每一帧
        frame = cv.flip(frame,1) #左右变换
        cv.imshow("video",frame)
        c = cv.waitKey(50) #程序等待50毫秒读取下一帧 改成1会更流畅
        if c == 27: #EXC的ASCII码为27,回车:13,换行(ctrl+Enter):10,,空格:32
            break

print("=====Hello Python=====")
Video_demo()
cv.waitKey(0)

cv.destroyAllWindows()

保存图片

import cv2 as cv
print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
gray = cv.cvtColor(src,cv.COLOR_BGR2GRAY) #灰度处理
cv.imwrite("D://result.png",gray) #保存灰度图

cv.waitKey(0)

cv.destroyAllWindows()

03Numpy数组操作

读取属性

import cv2 as cv
import numpy as np

def access_pixels(image):
    print(image.shape)
    height = image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    print("width:%s,height:%s,channels:%s"%(width,height,channels))

print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
access_pixels(src)
cv.waitKey(0)

cv.destroyAllWindows()

输出结果

=====Hello Python=====
(1000, 667, 3)
width:667,height:1000,channels:3

遍历和修改每个像素点

import cv2 as cv
import numpy as np

def access_pixels(image):
    print(image.shape)
    height = image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    print("width:%s,height:%s,channels:%s"%(width,height,channels))
    for row in range(height):
        for col in range (width):
            for c in range(channels):
                pv = image[row,col,c]  #获取它的维度
                image[row,col,c] = 255 - pv  #修改它的维度
    cv.imshow("pixels_demo",image)

print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
access_pixels(src)
cv.waitKey(0)

cv.destroyAllWindows()
效果:

创建新图像
多通道的:通道顺序(blue,green,red),所以下面的程序得到一张蓝色图片。
np.zeros:创建数组并赋值为0
np.ones:创建数组并赋值为1

import cv2 as cv
import numpy as np
"""""
def access_pixels(image):
    print(image.shape)
    height = image.shape[0]
    width = image.shape[1]
    channels = image.shape[2]
    print("width:%s,height:%s,channels:%s"%(width,height,channels))
    for row in range(height):
        for col in range (width):
            for c in range(channels):
                pv = image[row,col,c]  #获取它的维度
                image[row,col,c] = 255 - pv  #修改它的维度
    cv.imshow("pixels_demo",image)
"""""
def create_image():
    img = np.zeros([400,400,3],np.uint8)
    img[ : , : ,0] = np.ones([400,400])*255 #修改它的第一个通道,img[ : , : ,1]是绿色,img[ : , : ,2]是红色
    cv.imshow("new image",img)

print("=====Hello Python=====")
create_image()
cv.waitKey(0)

cv.destroyAllWindows()

单通道的:常见的是灰度图。如下显示的是一张400*400的灰色图片。

import cv2 as cv
import numpy as np
def create_image():
    img = np.ones([400,400,1],np.uint8)
    img = img * 127
    cv.imshow("new image",img)

print("=====Hello Python=====")
create_image()
cv.waitKey(0)

cv.destroyAllWindows()

04色彩变换

上面03中的颜色取反的代码可以简化成使用opencv中的API来完成。

import cv2 as cv
def inverse(image):
    dsc = cv.bitwise_not(image)
    cv.imshow("inverse image",dsc)

print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
inverse(src)
cv.waitKey(0)

cv.destroyAllWindows()

常见的色彩空间:RGB、HSV、HIS、YCrCb

import cv2 as cv
def color_space_demo(image):
    gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
    cv.imshow("gray",gray)
    hsv = cv.cvtColor(image,cv.COLOR_BGR2HSV)
    cv.imshow("hsv",hsv)
    yuv = cv.cvtColor(image,cv.COLOR_BGR2YUV)
    cv.imshow("yuv",yuv)
    Ycrcb = cv.cvtColor(image,cv.COLOR_BGR2YCrCb)
    cv.imshow("ycrcb",Ycrcb)
print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
color_space_demo(src)
cv.waitKey(0)

cv.destroyAllWindows()

05色彩空间

过滤颜色:用InRange函数来过滤视频中的颜色。

HSV色彩取值表.png

提取视频中的绿色:

import cv2 as cv
import numpy as np
def extract_object_demo():
    capture = cv.VideoCapture("C:/Users/Administrator/Desktop/green.mp4")
    while(True):
        ret,frame = capture.read()
        if ret == False:
            break
        hsv = cv.cvtColor(frame , cv.COLOR_BGR2HSV)
        lower_hsv = np.array([35,43,46])   #通过读表可知
        upper_hsv = np.array([77,255,255])   #通过读表可知
        mask = cv.inRange(hsv,lowerb = lower_hsv,upperb = upper_hsv)
        cv.imshow("video", frame)
        cv.imshow("mask",mask)
        c = cv.waitKey(1)
        if c==27:
            break

print("=====Hello Python=====")
extract_object_demo()
cv.waitKey(0)

cv.destroyAllWindows()
视频截图
通道分离与合并
print("=====Hello Python=====")
src = cv.imread("dog.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)

b,g,r = cv.split(src)  #通道的分离
cv.imshow("blue:",b)
cv.imshow("green:",g)
cv.imshow("red:",r)

src[ : ,: ,2] = 0  #三个通道的,最后一个通道改为0
cv.imshow("changed image",src)

src = cv.merge([b,g,r])
cv.imshow("merge image",src) #通道的合并
cv.waitKey(0)
cv.destroyAllWindows()

相关文章

网友评论

      本文标题:2019-04-02 OpenCV学习

      本文链接:https://www.haomeiwen.com/subject/phjgbqtx.html