Opencv-Python学习笔记(一)
学习和研究计算机视觉,必然绕不开OpenCV。
于是我下载了它的C++源码,用cmake编译遇到一些错误。
然后结合网上一些帖子看源码看了好几天,发现有点不知从何处入手。
于是准备从其python版本的使用来入门。参考书籍:"Learning OpenCV 3 Computer Vision with Python(Second Edition)"
1. 基本IO
1.1 读写图像文件
IMREAD_ANYCOLOR = 4
IMREAD_ANYDEPTH = 2
IMREAD_COLOR = 1
IMREAD_GRAYSCALE = 0
IMREAD_LOAD_GDAL = 8
IMREAD_UNCHANGED = -1
import cv2 # img = cv2.imread('xyc.jpg') grayImage = cv2.imread('xyc.jpg', cv2.IMREAD_GRAYSCALE) cv2.imwrite('xyc.jpg', grayImage)
无论采用哪种模式,imread()函数都会删除所有alpha通道的信息(透明度)
imwrite()函数要求图像为BGR格式或灰度格式,并且每个通道有一定的位,输出格式要支持这些通道。
1.2 图像与原始字节之间的转换
# numpy.random.randint(0, 256, 120000).reshape(300, 400)<br># urandom()Return a string of n random bytes suitable for cryptographic use<br># bytearray()方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256 randomByteArray = bytearray(os.urandom( 120000 ))<br> # Create an array flatNumpyArray = numpy.array(randomByteArray) grayImage = flatNumpyArray.reshape( 300 , 400 ) cv2.imwrite( 'RandomGray.png' , grayImage) bgrImage = flatNumpyArray.reshape( 100 , 400 , 3 ) cv2.imwrite( 'RandomColor.png' , bgrImage) |
1.3 用numpy.array访问图像数据
img.shape
img.size
img.dtype
img.item(150, 120, 0)
img.itemset((150, 120,0 ), 255)
img[:, :, 1] = 0将所有G值设为零
my_roi = img[0:100, 0:100]
img[300:400, 300: 400] = my_roi
1.4 视频文件的读写
读取AVI文件的帧, 并采用YUV颜色编码写入另一帧
1 2 3 4 5 6 7 8 9 10 11 | videoCapture = cv2.VideoCapture( 'MyInputVid.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( 'MyOutputvid' , cv2.VideoWriter_fourcc( 'I' , '4' , '2' , '0' ), fps, size) success,frame = videoCapture.read() |
指定视频解编码器常用选项:
cv2.VideoWriter_fourcc('I', '4', '2', '0')未压缩的YUV颜色编码,是4:2:0色度子采样。文件扩展名.avi
cv2.VideoWriter_fourcc('P', 'I', 'M', '1') MPEG-1类型编码,文件扩展名.avi
cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') MPEG-4类型编码,文件扩展名.avi
cv2.VideoWriter_fourcc('T', 'H', 'E', 'O') Ogg Vorbis, 文件扩展名为.ogv
cv2.VideoWriter_fourcc('F', 'L', 'V', '1') Flash视频, 文件扩展名为.flv
1.5 捕获摄像头的帧
1.6 在窗口显示图像
1.7 在窗口显示摄像头帧
2. Cameo项目(人脸跟踪和图像处理)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构