昨天晚上想把opencv学习笔记整理一下,当跑opencv调用摄像头的程序的时候老是出现Assertion failed (size.width>0 && size.height>0) in cv::imshow,最后查阅资料知道了是因为调用imshow()函数的时候传入的Mat为空导致的,可能是刚开始的时候摄像头并没有初始化成功,就调用imshow()导致程序已启动就down掉了,只要在while循环中判断一下传入的Mat是否为空就解决了
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char* argv[]) { VideoCapture cap(0); //设置摄像头 cap.set(CV_CAP_PROP_FRAME_WIDTH, 640); cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480); //确认是否成功打开摄像头 if (!cap.isOpened()){ cout << "打开摄像头失败,退出"; exit(-1); } namedWindow("Capture", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); while (1) { Mat frame; cap >> frame; if (!frame.empty()) { imshow("Capture", frame); } if (waitKey(30) >= 0) break; } return 0; }
时间: 2024-10-05 22:02:33