opencv的使用——经典大坑
视频或相机中读入的帧数不对,或有空帧
image check from cap or video:
you must check wether each frame is not empty when use VideoCapture. Like :
if(!image.empty())
{}
+0
这个bug你早晚会碰到的
Mat::rowRange || mat::.row // "+0" !!!
////R(3,:) = cross(R(1,:),R(2,:));
//R_out.rowRange(0, 2) = R.rowRange(0, 2) + 0; // "+0" !!!
//R_out.row(2) = R.row(0).cross(R.row(1)) + 0; // "+0" !!!
Python Open CV perspectiveTransform()
Error: Assertion failed (scn + 1 == m.cols && (depth == CV_32F || depth == CV_64F)) in perspectiveTransform, file /tmp/opencv-PEaA0A/opencv-2.4.9/modules/core/src/matmul.cpp, line 1936
解决
- 将数据类型转换为np.float32
- 将第一个参数由两通道转换为3通道
相机标定
drawchess的结果的第一列的点为宽度,点的列数为高度
opencv转换视频格式
VideoWriter writer(“object.avi”, CV_FOURCC(‘M’,’P’,’4’,’2’), 20.0, Size(640, 480));
CV_FOURCC(‘M’,’P’,’4’,’2’)设置成这样, 不然生成生.avi转换成的.mp4会有问题
cvAbsDiff
调用opencv中cvAbsDiff提示matrix.cpp:880: error: (-5) Unknown array type in file
查了很久才知道,原来在opencv3.0中的背景差分函数不是cvAbsDiff()
而是 absdiff(backgroundImage, currentImajge, foreground);
opencv版本多而杂乱,而且有C++/C的用法也不一样,千万注意
SurfFeatureDetector
调用SurfFeatureDetector 类提示没有声明,其实是该类声明于opencv2/nonfree/features2d.hpp文件中,而我们默认的声明文件opencv2/features2d.hpp,所以有些非开源免费使用的函数检测不到。解决方法#include <opencv2/nonfree/features2d.hpp>
类似的问题还有,使用BruteForceMatcher<L2> matcher 需要 include <opencv2/legacy/legacy.hpp>
Codeblocks运行opencv导入库
codeblocks运行opencv 参考
提示 undefined reference to symbol '_ZN2cv6imreadERKNS_6StringEi'
解决:文中有一步是把highgui.so opencvcore.so两个库添加到工程,而我们需要把所有含open.so的库都添加进来。
Error: invalid initialization of non-const reference of type ‘cv::Mat &’ from an rvalue of type ‘cv::Mat’
for( )
…
Cv::Mat &W = m_W.rowRange(2*frm, 2*frm + 2); // error from here!
Modify_W_function( W); // the parameter in function is needed for reference
…
end
Solution:
cv::Mat W = m_W.rowRange(2*frm, 2*frm + 2);
直观上理解,因为Modify_W_function要修改m_W的其中两行,所以应该返回一个引用类型的值,但是mat::rowRange()的返回值并非引用,所以会报这个错。
解决方法是把返回值赋给一个矩阵,但是直观上看这样再改变W的值并不会对m_W的改变。但是其实mat::rowRange()返回的是一个矩阵头,并不会重新分配内存给W,所以即使不使用引用型的W,那么W与m_w.rowRange()也是指向的是同一块内存。所以可以这么解决问题。
opencv的使用——经典大坑的更多相关文章
- OpenCV imread读取jpg图像的一个大坑
长话短说 版本区间[OpenCV3.0.0, OpenCV3.4.1]内的OpenCV,(至少在windows下,使用官方提供的预编译版本),imread读取jpg图片后的像素值,和版本区间[Open ...
- 90年代经典“手游”—拼图板小游戏Opencv实现
80后可能还对儿时玩过的一种经典木质的拼图板游戏记忆犹新,一般是一种4*4或5*5规格的手持活动板,通过挪动每个小板子的位置,拼出来板子上完整的图像,那时候还没有网吧,手机也还是大哥大的天下,所以这也 ...
- Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误
今天因为想要用OpenCV做图像识别,小白一个,在网上找到一个教程,但是需要配置OpenCV3.3.0的环境,于是又在网上找OpenCV3.3.0+VS2013(因为我之前已经安过了VS2013),前 ...
- 解析opencv中Box Filter的实现并提出进一步加速的方案(源码共享)。
说明:本文所有算法的涉及到的优化均指在PC上进行的,对于其他构架是否合适未知,请自行试验. Box Filter,最经典的一种领域操作,在无数的场合中都有着广泛的应用,作为一个很基础的函数,其性能的好 ...
- OpenCV图像细化的一个例子
转自:http://blog.csdn.net/zfdxx369/article/details/9091953?utm_source=tuicool 本文是zhang的一篇经典图像细化论文,效果很好 ...
- 相机位姿估计1_1:OpenCV:solvePnP二次封装与性能测试
关键词:OpenCV::solvePnP 文章类型:方法封装.测试 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-27 @Lab: CvLab20 ...
- 人脸识别经典算法三:Fisherface(LDA)
Fisherface是由Ronald Fisher发明的,想必这就是Fisherface名字由来.Fisherface所基于的LDA(Linear Discriminant Analysis,线性判别 ...
- opencv 简单模糊和高斯模糊 cvSmooth
cv::Mat 是C++版OpenCV的新结构. cvSmooth() 是老版 C API. 没有把C接口与C + + 结合. 建议你们也可以花一些时间看一下介绍. 同样,你如果查看opencv/mo ...
- OpenCV进阶之路:神经网络识别车牌字符
1. 关于OpenCV进阶之路 前段时间写过一些关于OpenCV基础知识方面的系列文章,主要内容是面向OpenCV初学者,介绍OpenCV中一些常用的函数的接口和调用方法,相关的内容在OpenCV的手 ...
随机推荐
- poj3177 BZOJ1718 Redundant Paths
Description: 有F个牧场,1<=F<=5000,现在一个牧群经常需要从一个牧场迁移到另一个牧场.奶牛们已经厌烦老是走同一条路,所以有必要再新修几条路,这样它们从一个牧场迁移到另 ...
- eclipse里配置Android ndk环境,用eclipse编译.so文件
做Android NDK开发时,c代码需要用ndk-build来进行编译,而java代码则需要用Android sdk编译. 编译c代码有两种方法: 一.写好c代码后,然后用cygwin搭建ndk-b ...
- 【HASH】【UVA 10125】 Sumset
传送门 Description 给定一个整数集合S,求一个最大的d,满足a+b+c=d,其中a,b,c,d∈S Input 多组数据,每组数据包括: 第一行一个整数n,代表元素个数 下面n行每行一个整 ...
- PhoneGap API介绍:Camera
本文将介绍PhoneGap API——Camera:使用设备的摄像头采集照片,对象提供对设备默认摄像头应用程序的访问. 方法: camera.getPicture 参数: cameraSuccess ...
- [dhcpd]清除dhcp缓存
修改了dhcp的default-lease-time && max-lease-time 清除缓存: rm /var/lib/dhcpd.leases~ echo "&quo ...
- Android滚动栏控件的优化
背景 由于普通TextView的跑马灯效果与焦点获取有关 所以不能直接使用 之前查找到的控件在数据设置方面存在问题 所以通过寻找github上的开源控件 并修改源码 得到一个目前感觉不错的效果 原理 ...
- notify()与notifyAll()
notify() :随机唤醒一个线程. notifyAll():唤醒等待某个锁的所有任务. 在技术上,可能会有多个任务在所创建的任务上处于wait()状态,调用notifyAll()比只调用notif ...
- 前后端分离中,gulp实现头尾等公共页面的复用 前言
前言 通常我们所做的一些页面,我们可以从设计图里面看出有一些地方是相同的.例如:头部,底部,侧边栏等等.如果前后端分离时,制作静态页面的同学,对于这些重复的部分只能够通过复制粘贴到新的页面来,如果页面 ...
- hdu 4903 The only survival
The only survival http://acm.hdu.edu.cn/showproblem.php?pid=4903 Time Limit: 40000/20000 MS (Java/Ot ...
- POJ 1014 / HDU 1059 Dividing 多重背包+二进制分解
Problem Description Marsha and Bill own a collection of marbles. They want to split the collection a ...