2019-04-02 OpenCV学习

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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容

  • 职场中少不了要跟领导汇报工作,口头,书面,演讲,以前自己一直不太理解汇报工作的重要性,以为进入职场,一门心思把自己...
    晚风过境阅读 670评论 0 2
  • 不想死去 ---荒原狼 我以血泪控诉 我不想死去 空虚的躯体掩埋着的 只有迷茫的惆怅 要在黎明之前觉醒 因为我...
    荒原狼1993阅读 404评论 0 1
  • 模仿这事,做得好,就叫致敬,做得糟,就叫抄袭。电影界历来不缺那些因东拼西凑而备受诟病的作品,比如那简直就是岩井俊二...
    Pegasus9127阅读 248评论 0 2
  • 三十秒法则 三十秒的时间,想要利用好这三十秒,自己准备的资料要熟记于心,重点要点简单扼要,不可长篇大论。电视节目里...
    遇见晚晴阅读 63评论 2 4