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

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。但对于用户而言,可以提供快速查询天气状况和温度数据,并且只需…

使用ACE_SOCK_SEQPACK_Association获取socket连接的本地及远程IP端口信息

int connect(const std::string& ip, int port){ ACE_INET_Addr portAddr(port, ip.c_str()); ACE_SOCK_Connector connector; ACE_SOCK_Stream peer; if (-1 connector.connect(peer, portAddr)) { std::cout << "连接服务器(" <&…

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(双向队列)操作以及…

Android SAX API: XmlResourceParser及其扩展应用

XmlResourceParser继承了2个接口&#xff1a;AttributeSet和XmlPullParser。其中XmlPullParser定义了Android SAX框架。跟Java 的SAX API相比&#xff0c;XmlPullParser令人难以置信地简单。 一、使用XmlResourceParser读取资源束中的xml 资源束是应用程序编译后的应用程序包…

linux fdisk 磁盘空间使用率,linux查看磁盘剩余空间以及cpu使用情况

1、查看CPU个数cat /proc/cpuinfo | grep "physical id" | uniqtop可以实时的查看cpu的使用情况2、查看CPU核数cat /proc/cpuinfo | grep "cpu cores" | uniq3、查看CPU型号cat /proc/cpuinfo | grep model name |uniq4、查看内存cat /proc/meminfo | grep…

c语言 函数的参数传递示例_restder()函数,带有C ++中的示例

c语言 函数的参数传递示例C restder()函数 (C remainder() function) remainder() function is a library function of cmath header, it is used to calculate the remainder (IEC 60559), it accepts two parameters (numerator and denominator) and returns the remainder…

jquery validation-jquery的验证框架 详解(1)

jquery validation验证框架是一款非常优秀的客户端数据验证框架。我们在日常的项目中都会应用得到。今天开始我们会分两到三个个阶段 详细的了解这款插件 至于这款插件是多么的优秀&#xff0c;怎么个描述法 我这里就不详细述说。大家可以在接下来的时间里接触并且感觉它的强大…

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

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

【视觉项目】【day2】8.21号实验记录(手机固定高度15cm拍摄+直方图均衡化+模板匹配,模板12个,测试28个,效果十分差)

目录均衡化代码模板图片按照大小排序总代码测试效果新思路由于模板匹配是像素之间的比对&#xff0c;所以不同光照下的像素灰度值也会不同 所以在比对之前&#xff0c;我们需要对测试图和模板图进行直方图均衡化&#xff0c;这一步可以先实现。 今天将采用批量处理的方式&#…

c语言 函数的参数传递示例_isgreater()函数以及C ++中的示例

c语言 函数的参数传递示例C isgreater()函数 (C isgreater() function) isgreater() function is a library function of cmath header, it is used to check whether the given first value is greater than the second value. It accepts two values (float, double or long…

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

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

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

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

Linux下动态库使用小结

1. 静态库和动态库的基本概念 静态库&#xff0c;是在可执行程序连接时就已经加入到执行码中&#xff0c;在物理上成为执行程序的一部分&#xff1b;使用静态库编译的程序运行时无需该库文件支持&#xff0c;哪里都可以用&#xff0c;但是生成的可执行文件较大。动态库&#xf…

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

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

scala字符替换_如何替换Scala中的“坏”字符?

scala字符替换In Scala, programming language, all sorts of special characters are valid. The character set library is quite good and supports almost all characters in Scala programming. 在编程语言Scala中&#xff0c;各种特殊字符均有效。 字符集库非常好&#x…

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

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

【视觉项目】【day1】8.20号实验记录(初步使用模板匹配)

目录【day1】8.20号实验记录&#xff08;初步使用模板匹配&#xff09;模板匹配单张图的代码利用多个模板去匹配多张图的代码写代码过程中遇到的问题【day1】8.20号实验记录&#xff08;初步使用模板匹配&#xff09; 模板匹配 利用模板匹配可以框定出瓶子&#xff0c;但是却…

第四章 纤维结构对染色性能的影响单元测验

1,利用红外光谱技术可以测定纤维的() 化学结构。 2,纤维完整的结构包括() 化学结构。 表面形态结构。 内部超分子结构。 3,纤维化学结构由于影响了纤维(),进而影响其染色性能 吸湿溶胀性能。 在染液中电离性能。 在染浴中的带电性。 与染液中各组分之间的作用力。 …

创建存储过程时出现的This function has none of DETERMINISTIC, NO SQL解决办法

This function has none of DETERMINISTIC, NO SQL解决办法创建存储过程时 出错信息&#xff1a; ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the …