opencv
傲笑风
让机器看懂世界
展开
-
opencv: 解决保存视频失败的问题
OpenCV:FFMPEG:tag 0x63766568/'hevc'is not supported with codec id 173 and format 'mp4 MP4 (MPEG-4 Part 14)OpenCV:FFMPEG:fallback to use tag 0x31766568/'hev1'[ERROR:0015.854]global /croot/opencv-suite_1676452025216/work/modules/videoio/src/cap_ffmpeg_impl原创 2023-09-26 10:13:15 · 1312 阅读 · 0 评论 -
对输入图像按比例压缩、居中填充
图像在输入神经网络之前,通常需要进行尺寸压缩,如yolov5的输入为640x640,分类网络Resnet-50的输入为224x224。通常地,分类网络直接将输入进行resize处理,而对于目标检测网络,为了防止目标变形,通常采用padding的方法。但由于letterbox函数太过难理解了,于是就自己写了一个,分别使用PIL和opencv实现了。原创 2023-07-05 20:39:14 · 418 阅读 · 0 评论 -
shape和resize对应的高(height)和宽(weight)的顺序
无论是pytorch还是oepncv,都有对应的成员变量shape以及函数resize,其对应的高(height)和宽(weight)的顺序是不一样的。从中可以发现,shape返回图片的尺寸顺序是:高、宽。而resize()函数输入参数顺序是:宽、高。同理,pytorch也是如此。原创 2023-04-09 22:07:16 · 1375 阅读 · 1 评论 -
opencv: 解决无法读取带有中文名称或路径的图片
opencv的图片读取的常用函数是imread(),但该函数无法带有中文名称或者存在中文路径的图片。原创 2023-04-02 21:29:05 · 1329 阅读 · 0 评论 -
opencv:CAP_PROP_FRAME_COUNT获取视频帧数错误
opencv读取视频,可以通过属性(CAP_PROP_FRAME_COUNT)获取视频的总帧数,但是有些视频通过该属性获取的帧数和实际遍历整个视频的帧数不一样。import cv2 as cvvideo = "1.avi"cap = cv.VideoCapture(video)frames = cap.get(cv.CAP_PROP_FRAME_COUNT) # 通过属性获取帧数count = 0 # 用于计算视频的实际帧数while cap.isOpened(): ret, fra原创 2022-01-10 17:11:15 · 11070 阅读 · 6 评论 -
OpenCV:判断读取图片是否成功
当用imread()读取图片时,如果图片路径错了,或者图片名称,又或者后缀格式错误,程序都会报错;基于这个问题,有时候我们不知道是读取图片失败而报错,会误以为是其它行代码出错了。所以,经常读取图片后,会进行判断图片是否读取成功,如果读出失败,通过控制台反馈输出说明。原创 2020-06-08 11:29:45 · 7470 阅读 · 4 评论 -
浅谈仿射变换和透视变换的区别
从直观的角度看,仿射变换和透视变换的最大区别是:一个平行四边形,经过仿射变换后依然是平行四边形;而经过透视变换后只是一个四边形(不再平行了)。仿射变换仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程,转换过程坐标点的相对位置和属性不发生变换,是一个线性变换,该过程只发生旋转和平移过程。因此,一个平行四边形经过仿射变换后还是一个平行四边形。所以,仿射= 旋转 + 平移仿射变换矩阵为:...原创 2020-02-05 17:20:27 · 5312 阅读 · 1 评论 -
opencv:保存视频
我们常常从输入的数据流(视频)当中把目标检测出来,检测的结果一般用矩形框起来。每当我们向别人显示效果时,都要重新运行程序,这样耗费时间。所以,我们可以把有标注的视频保存起来,以便用作ppt或向别人显示。本文采用opencv来对视频进行保存,编程语言为python:cap = cv.VideoCapture("input.mp4") #输入视频width = int(cap.get(cv.CA...原创 2020-02-01 14:52:15 · 1827 阅读 · 3 评论 -
探究opencv中的moments函数和HuMoments函数
用过opencv的人都可能接触过轮廓,一般获取轮廓后我们都需要根据轮廓的特征来筛选出我们要找的目标物体,而筛选轮廓的常用办法都是基于轮廓的周长和面积,然后返回目标轮廓的最小矩阵把目标在原图像上标框出来。**一、moment()**但是在轮廓特征函数有这样一个函数:moment(),这个函数是用来求图像的矩(注意:不是hu不变矩)。可能大家经常都看见过用这个函数来求轮廓的质心:mu...原创 2019-11-26 21:27:41 · 9276 阅读 · 0 评论 -
用opencv3进行特征点匹配
用opencv3进行特征点匹配本篇文章主要是展示如何用opencv3来使用SurfFeatureDetector,SurfDescriptorExtractor,BruteForceMatcher类#include "opencv2/opencv.hpp"#include "opencv2/core.hpp"#include "opencv2/highgui.hpp"#include原创 2018-01-30 15:26:11 · 2873 阅读 · 0 评论 -
关于opencv3.x与opencv2.x的某些类的写法发生的变化
关于opencv3.x与opencv2.x的某些类的写法发生了变化想了很久,要不要写一下这篇博客,因为我在学习opencv的时候,因为版本的不同,常常在自己写代码运行时,老是发生语法错误,老是上网去查找或去提问大神们,又需要等待,这样太浪费时间了,所以我总结了一下我在学习opencv时因版本不同而发生写法不同的体会,希望对大家有帮助,特别是初学者。在学习BackgroundSubtrac原创 2018-01-30 01:09:29 · 1124 阅读 · 0 评论 -
浅谈opencv3.2中各个模块的简介
3.2版本的模块说明:Opencv3.2模块 首先打开opencv_modules.hpp文件,可以看到对于各个功能模块的定义如下: This file defines the list of modules available in current build configuration*#define HAVE_OPENCV_CALIB3D *#define HAVE_OPENCV_C原创 2017-12-09 16:42:27 · 1758 阅读 · 0 评论 -
基于opencv3的人脸检测
目前opencv3中已经有人脸检测的类了,只要调用函数库的类就行该程序需要两个xml文件,分别是haarcascade_frontalface_alt.xml和haarcascade_eye_tree_eyeglasses.xml,它们分别是已经通过了大量训练且能检测出人脸和眼睛了,只要调用即可。#include"opencv2/objdetect/objdetect.hpp"#include"o原创 2017-12-09 16:35:28 · 802 阅读 · 0 评论 -
BackgroundSubtractorMOG2在opencv2和opencv3的使用区别
BackgroundSubtractorMOG2在opencv2和opencv3的使用区别在opencv2.x版本的使用:#include"opencv2/opencv.hpp"#include"opencv2/core/core.hpp"#include"opencv2/highgui/highgui.hpp"#include"opencv2/imgproc/imgproc.hpp"#in原创 2017-10-08 15:42:43 · 2162 阅读 · 1 评论 -
opencv2与opencv的不同
一:Opencv2与opencv1的区别:Opencv1.0版本于2006年面世,主要基于C语言。2009年发布opencv2,主要基于C++。此时OpenCV库被划分成多个模块,这些模块被编译成库文件后,位于lib文件夹中。主要有以下模块(版本1的结构见我的这篇blog:http://blog.csdn.net/lu597203933/article/details/13614377):原创 2017-03-20 20:10:05 · 4162 阅读 · 0 评论 -
用opencv3写的超详细注释的车牌检测
#include"iostream"#include"opencv2/opencv.hpp"#include"opencv2/highgui/highgui.hpp"#include"opencv2/core/core.hpp"#include"opencv2/imgproc/imgproc.hpp"using namespace std;using namespace c原创 2017-06-11 16:52:17 · 5635 阅读 · 1 评论 -
超详细注释的基于opencv3的Optical flow(光流点追踪)
#include#include#include#include#includeusing namespace cv;using namespace std;void track(Mat& frame, Mat& result);bool addNewPoint();bool acceptTrackPoint(int i);Mat curgray;//当前图原创 2017-06-10 15:49:22 · 4276 阅读 · 0 评论