視頻或相機中讀入的幀數不對,或有空幀
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
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()也是指向的是同一塊內存。所以可以這么解決問題。