处理文件、摄像头和图形用户界面

1、基本I/O脚本

1.1 读/写图像文件

import numpy
import cv2#利用二维Numpy数组简单创建一个黑色的正方形图像
img = numpy.zeros((3,3),dtype=numpy.uint8)
img
#结果为:
'''
array([[0, 0, 0],[0, 0, 0],[0, 0, 0]], dtype=uint8)
'''       
img.shape#结果为:(3, 3)####################################################################利用cv2.cvtColor函数将该图像转化为BGR格式
img1 = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
img1
#结果为:
'''
array([[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]],[[0, 0, 0],[0, 0, 0],[0, 0, 0]]], dtype=uint8)
'''
img1.shape#结果为:(3, 3, 3)

①将图像从PNG格式转换为JPG格式:
②将BGR图片转化为灰度图片:

import cv2image = cv2.imread("result.png")
cv2.imwrite("show.jpg",image)grayImage = cv2.imread('result.png',cv2.IMREAD_GRAYSCALE)
cv2.imwrite('gray.png',grayImage)

运行前:
在这里插入图片描述
运行后:
在这里插入图片描述

1.2 图像与原始字节之间的转换

将含有随机字节的bytearray转换为灰度图像和BGR图像:

import cv2
import numpy
import osrandomByteArray = bytearray(os.urandom(120000))
flatNumpyArray = numpy.array(randomByteArray)grayImage = flatNumpyArray.reshape(300,400)#(y,x)
cv2.imwrite('RandomGray.png',grayImage)bgrImage = flatNumpyArray.reshape(100,400,3)#(y,x,颜色通道数目)
cv2.imwrite('RandomColor.png',bgrImage)

运行前:
在这里插入图片描述
运行后:
在这里插入图片描述

1.3 使用numpy.array访问图像数据

将BGR图像在(10,10)处的像素转换为红像素

import cv2
import numpy as npimg = cv2.imread("result.png")
img[10,10] = [0,0,255]#[B,G,R]
cv2.imshow('yy',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果为:在这里插入图片描述

将坐标(150,120的当前蓝色值(127)变为255:

import cv2
import numpy as np
img = cv2.imread("result.png")
print(img.item(50,20,0))
#pixel
img.itemset((150,20,0),255)
print(img.item(50,20,0))
cv2.imshow('yy',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果为:在这里插入图片描述

操作通道:将指定通道(B,G,R)的值置为零,下列代码将图像所有的R通道设置为0(黑色),为了是效果更加明显,这里将图片选择纯红色的彩色照片。

import cv2
import numpy as np
img = cv2.imread("red.jpg")
img[:,:,2] = 0
cv2.imshow('yy',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

原始照片:在这里插入图片描述
运行结果:在这里插入图片描述

将该区域与变量绑定,然后设定第二个区域,并将第二个区域的值分配给第二个区域(将图像的一部分拷贝到改该图像的另一个位置)

原始图片:在这里插入图片描述
运行结果:在这里插入图片描述

获得图像属性:
shape::Numpy返回包含宽度、高度和通道数(如果图像是彩色的)的数组,这在调试图像类型时很有用:如果图像是单色或灰度的,将不包含通道值。
size:该属性是指图像像素的大小。
datatype:该属性会得到图像的数据类型(通常为一个无符号整数类型的变量和该类
型占的位数,比如uint8类型)。

import cv2
import numpy as np
img = cv2.imread("result.png")
print(img.shape)#结果为:(250, 250, 3)
print(img.size)#结果为:187500
print(img.dtype)#结果为:uint8

1.4 视频文件的读/写

Opencv提供了 Video Capture类和 Videowriter类来支持各种格式的视频文件。支持的格式类型会因系统的不同而变化,但应该都支持AWI格式。在到达视频文件末尾之前,Video Capture类可通过 reado函数来获取新的帧,每帧是一幅基于BGR格式的图像。
可将一幅图像传递给 Video Writer类的 write(0函数,该函数会将这幅图像加到Videowriter类所指向的文件中。

读取AVI文件(hahaha.avi)的帧,并采用YUV颜色编码将其写人另一个帧(xixixi.flv)中:

import cv2
videoCapture = cv2.VideoCapture("hahaha.avi")
fps = videoCapture.get(cv2.CAP_PROP_FPS)
size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter('xixixi.flv',cv2.VideoWriter_fourcc('F','L','V','1'),fps,size)success,frame = videoCapture.read()
while success:videoWriter.write(frame)success,frame = videoCapture.read()

运行结果:在这里插入图片描述

代码文件扩展名备注
cv2.VideoWriter fouree (T’, ‘4’,‘2’,‘0’).avi该选项是一一个未压缩的YUV颜色编码,是4:2:0色度子采样。这种编码有很好的兼容性,但会产生较大文件。
cv2.VideoWriter_ fouree (‘P’,T’, ‘M’, ‘1’).avi该选项是MPEG-1编码类型。
cv2.VideoWriter_ fourcc (‘X’, ‘V’,T, ‘D’).avi该选项是MPEG-4编码类型,如果希望得到的视频大小为平均值,推荐使用此选项。
cv2.VideoWriter_ fourcc(‘T’,‘H’,‘E’ ,‘O’).ogv该选项是Ogg Vorbis
cv2.VideoWriter_ fourcc (‘F’,‘L’, ‘V’, ‘1’).flv该选项是一个Flash视频

1.5 捕获摄像头的帧并保存

捕获摄像头10s的视频信息,并写入一个AVI文件中:

import cv2cameraCapture = cv2.VideoCapture(0)
fps = 30
size = (int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
videoWriter = cv2.VideoWriter("siqi.avi",cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)success,frame = cameraCapture.read()
numFramesRemaining = 10*fps-1
while success and numFramesRemaining > 0:videoWriter.write(frame)success,frame = cameraCapture.read()numFramesRemaining -= 1
cameraCapture.release()

运行结果:在这里插入图片描述

1.6 在窗口显示图像

import cv2
import numpy as npimg = cv2.imread("gray.png")
cv2.imshow('siqi_show',img)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果:在这里插入图片描述

1.7 在窗口显示摄像头帧

OpenCV的窗口函数和waitKey()函数相互依赖。OpenCV 的窗口只有在调用waitKey()函数时才会更新,waitKey()函数只有在OpenCV窗口成为活动窗口时,才能捕获输人信息。鼠标回调雨数setMouseCallback()有五个参数。param为可选参数,它是setMouseCallback(函数的第三个参数,默认情况下,该参数是0。
实时显示摄像头帧,按任意键结束:

import cv2clicked = False
def onMouse(event,x,y,flags,param):global clickedif event == cv2.EVENT_LBUTTONUP:clicked = TruecameraCapture = cv2.VideoCapture(0)
cv2.namedWindow('siqi')
cv2.setMouseCallback('siqi',onMouse)print('press any key to stop!')
success,frame = cameraCapture.read()
while success and cv2.waitKey(1) == -1 and not clicked:cv2.imshow('siqi',frame)success,frame = cameraCapture.read()cv2.destroyWindow('siqi')
cameraCapture.release()

运行结果:在这里插入图片描述
回调事件参数可以取如下的值,它们分别对应不同的鼠标事件。

回调事件参数事件描述
cv2.EVENT MOUSEMOVE该事件对应鼠标移动
cv2. EVENT LBUTTONDOWN该事件对应鼠标左键按下
cv2. EVENT RBUTTONDOWN该事件对应鼠标右键按下
cv2.EVENT MBUTTONDOWN该事件对应鼠标中间键按下
cv2.EVENT LBUTTONUP该事件对应鼠标左键松开
cv2.EVENT_ RBUTTONUP该事件对应鼠标右键松开
cv2.EVENT MBUTTONUP该事件对应鼠标中间键松开
cv2.EVENT LBUTTONDBLCLK该事件对应双击鼠标左键
cv2.EVENT RBUTTONDBLCLK该事件对应双击鼠标右键
cv2.EVENT MBUTTONDBLCLK该事件对应双击鼠标中间键

鼠标回调的标志参数可能是以下事件的按位组合:

鼠标回调的标志参数对应事件描述
cv2.EVENT FLAG LBUTTON该事件对应按下鼠标左键
cv2.EVENT FLAG RBUTTON该事件对应按下鼠标右键
cv2.EVENT FLAG MBUTTON该事件对应按下鼠标中间键
cv2.EVENT FLAG CTRLKEY该事件对应按下Ctrl键
cv2.EVENT FLAG SHIFTKEY该事件对应按下Shift 键
cv2.EVENT FLAG ALTKEY该事件对应按下Alt键

OpenCV不提供任何处理窗口事件的方法。例如:当单击窗口的关闭按钮时,并不能关闭应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux桌面天气,Ubuntu 14.10中安装和配置天气应用

对于操作系统平台而言,有各种小插件功能方便用户日常应用。在Ubuntu桌面中提供天气信息的功能,可以使用Unity Dash和桌面应用来获得相关信息,比如Typhoon。但对于用户而言,可以提供快速查询天气状况和温度数据,并且只需…

linux批处理操作系统_批处理操作系统

linux批处理操作系统批处理操作系统 (Batch Processing Operating System) When we are working in an environment there is a restriction of making use of computer resources effectively and improvement in the programmers output. When we are working with tapes a l…

STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)

目录前言【1】stack操作以及应用stack的几个核心接口利用stack完成进制转换【2】priority_queue操作以及应用priority_queue的几个核心接口利用priority_queue完成合并果子问题【3】vector操作以及应用vector的几个核心接口利用vector完成随机排序【4】deuqe(双向队列)操作以及…

已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为“名”+空格+“姓”;并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写。(后附详细样例说明)

已知一个掺杂了多个数字字符的中文名拼音,去掉所有数字字符之后,形式为“名”空格“姓”;并且名和姓的首字母大写,其他小写,要求输出姓名全拼,且全为小写。(后附详细样例说明) 【输入…

在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑

【问题描述】 在一个风景秀丽的小镇,一天早上,有N名晨跑爱好者(编号1~N)沿着优雅的江边景观道朝同一方向进行晨跑,第i名跑者从位置si处起跑,且其速度为Vi。换句话说,对所有的实数t≥0,在时刻t时第i名跑者的…

linux内核测试,Linux内核测试的生命周期

内核持续集成(CKI)项目旨在防止错误进入 Linux 内核。在 Linux 内核的持续集成测试 一文中,我介绍了 内核持续集成Continuous Kernel Integration(CKI)项目及其使命:改变内核开发人员和维护人员的工作方式。本文深入探讨了该项目的某些技术方面&#xff…

【视觉项目】【day3】8.22号实验记录(利用canny检测之后的来进行模板匹配)

【day3】8.22号实验记录(几乎没干正事的一天,利用canny检测之后的来进行模板匹配) 今天没搞代码,主要是问研究生学长工业摄像头的接法的,学长也不知道,明天问问老师。。。 晚上搞了一下canny之后的模板匹配…

linux dd 大文件下载,Linux dd+grep 大文件二分查找

Linux dd 命令用于读取、转换并输出数据。dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。参数说明(dd --help)Usage: dd [OPERAND]...or: dd OPTIONCopy a file, converting and formatting according to th…

如何让没有安装网页中所需字体的用户也能得到一致的浏览效果【转】

今天给大家谈一个关于字体的话题,我们在做项目的过程中会遇到一些在psd中的字体在自己的电脑中没有安装,或者是一些特殊的文字,通常的做法是把它切成图片,但是如果这个站是多个语言的,那我们是不是把每个语言的都切一张图片呢&…

【视觉项目】【day4】8.24号实验记录(消除瓶子内部“边缘”)

思路分析以及代码 思路1:使用findContours函数,设置轮廓为最外部RETR_EXTERNAL,结果发现结果仍然是所有轮廓。 思路2:先二值化,然后进行闭操作,然后canny,得到的轮廓确实比之前少很多&#xff…

国产操作系统和linux 之间的关系,为何国产系统大多基于开源Linux?操作系统从0做起到底有多难?...

今年貌似是国产操作系统的“爆发”之年,除了老牌的银河麒麟、中标麒麟、深度之外,中兴近日发布了自己的“新支点”,华为也公开了自研的操作系统“鸿蒙”。纵观这些国产操作系统,大多基于开源的Linux。那么为什么我们不可以从0开始…

js 第四课

正则表达式:RegExp对象 正则表达式描述一个字符模式的对象,或者说用某种模式去匹配一类字符串的一个公式。 1.创建 可以用RegExp构造函数和直接量两种方式。正则表达式直接量被包含在一对"/"中. 1 var partern1 RegExp(\\d*); 2 …

解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

目录【1】解析法实现一元线性回归python列表实现利用Numpy实现利用TensorFlow实现数据和模型可视化【2】解析法实现多元线性回归利用Numpy实现需要用到的NumPy数组运算函数数据和模型可视化绘制空间点集:绘制空间平面图:绘制线框图并且与散点图对比&…

32位系统win2008+mssql2008 6G内存折腾纪实

十年没搞硬件了,现在计算机发展到大硬盘大内存的时代了。一直都少搞服务器配置、运营,以前弄服务器都是普通的PC来当服务器。公司原来的一个业务系统用的是mssql2000好几年了,由于业务数据越积压越多最大的一张表已经有7000多万条记录了&…

前台用js、jquery出现错误很多是由于IE缓存

例如:当你用jquery进行异步请求数据时,如果浏览器发现请求的地址不变,或者参数也不改变的情况下 IE默认是取原来的缓存中的数据,而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值,IE发现地址改变&a…

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010,MVC版本采用Asp.Net MVC3,数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息: SVN-Url:svn://svn.cyqdata.com/project_bbs 账户申请:请将自己的密码发给组长,…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析(一元线性回归)【5】流程分析(多元线性回归)归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法:1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样? 先看公式: TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考: 模板匹配的几…