【CV学习笔记】OpenCV基本操作

作者:云时之间

链接:https://zhuanlan.zhihu.com/p/102322268

编辑:王萌

今天这一篇文章主要记录一下OpenCV中一些基本的操作,包括读取图片,视频以及反转图像的几种操作:

  一:图片的载入

图片载入很常用,很实用。。。

  二:读取视频

读取视频分为从摄像头中读入和从硬盘中读入,如果是摄像头就在videocapture函数中填写数值,0是默认的第一个摄像头,1.是第二个,以此类推,如果没有外置摄像头,就直接“”填写路径就行。

  三:打印图片的类型

图片的信息主要包括图片的类型,图片的尺寸,图片的长宽高以及通道数,如果是彩色图片通道数就是3,如果是黑白的图片通道数为1。

我这里定义了一个函数来输出图片的信息:

这里可以看到:

图片的大小是589*646的彩色3通道图片,编码方式是uint8.

  四:图像的对比度转换

我们知道图像的像素数是从0-255,如果实现图像的反转只需要遍历每个像素然后每个像素减去255即可,这里用一个笨方法实现以下:

得出的结果是这样:

似乎转换了以后的图片还挺好看的。

当然,这样的方法太过于复杂,并且执行时间,效率都很低:

用时长达4555毫秒。。。

这时候我们使用OpenCV自带的bitwise_not函数:

因为底层是使用的C++语言进行封装,所以执行快得多,来对比下:

同样的一张图只需要17ms,舒服多了。

  五:时间消耗的计算

上图中的测试时间的计算用到了两个函数:

GetTickcount函数:它返回从操作系统启动到当前所经历的计时周期数

GetTickFrequency函数:返回每秒的计时周期数

使用的方法:

t1 = cv.getTickCount()

#你需要的测试的函数或代码

t2 = cv.getTickCount()

time = (t2-t1)/cv.getTickFrequency()
print("time:%s ms"%(time*1000))

最后,附上完整代码,方便大家复现,下一篇文章就要开始学习图像色彩空间的转换,还需努力。如果有任何问题欢迎在底下评论,我们一起交流,一起加油!

import cv2 as cv
import numpy as np


def access_pixel(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("numpy_test",image)


def inverse(img):
    dis = cv.bitwise_not(img)
    cv.imshow("inverse",dis)


def create_image():
    '''
    img  = np.zeros([400,400,4],np.uint8)
    img[ :, :,0] = np.ones([400,400])*255 #对通道进行赋值,0是蓝通道,1是绿通道,2是红色通道,多通道
    cv.imshow("new_image",img)
    '''
    #初始化灰度图像
    img2 = np.zeros([400,400,1],np.uint8)
    img2[:,:,0] = np.ones([400,400])*127
    #img2 = img2*127
    cv.imshow("new_image_2",img2)


    #维度变换
    m1 = np.ones([3,3],np.uint8)
    m1.fill(12222.388)
    print(m1)


    m2 = m1.reshape([1,9])
    print(m2)


print("---------HELLO-----PYTHON--------------------")
src = cv.imread("D:/1.png")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
t1  = cv.getTickCount()
#access_pixel(src)
#create_image()
inverse(src)
t2 = cv.getTickCount()
#测试时间消耗
time = (t2-t1)/cv.getTickFrequency()
print("time:%s ms"%(time*1000))
cv.waitKey(0)
cv.destroyAllWindows()

每天进步一丢丢

设计自组织映射神经网络并设定网络训练参数——设计输出层节点的排列

输出层的节点排列成哪种形式取决于实际应用的需要,排列形式应尽量直观地反映出实际问题的物理意义。例如,对于一般的分类问题,一个输出节点能代表一个模式类,用一维线阵既结构简单又意义明确;对于颜色空间或者旅行路径类的问题,二维平面则比较直观。

预告:设计自组织映射神经网络并设定网络训练参数——初始化权值

今天因为你的点赞,让我元气满满

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值