初学opencv心得:imshow中断退出问题和stitcher报错问题
来源:互联网 发布:逃犯 熊孩子 知乎 编辑:程序博客网 时间:2024/05/18 02:21
初学,为了联系代码,写了个小程序,很小很小。就是遍历目录,将目录中的.jpg图片拼接在一起,但是程序一运行到imshow函数就中断退出,调试了半天,发现图片没有正常读取,所以imshow报错了。发现了问题后,又不知道怎么解决。正当郁闷时,想到opencv是不是配置出现了问题,于是在属性的链接里,把所有的链接器-》输入-》附加依赖项中的lib文件中,没有d的都去掉。结果瞬间程序运行顺畅。我靠,opencv配置太麻烦了,每次都需要重新配置,因为建立的是win32程序,我的机器是64位,每次修改64位时都需要重新配置一次,配置有偏差的话程序就运行报错。崩溃!也算积累经验了。
紧接着stitcher又出现了问题。运行后好半天都不懂,于是终止了程序。把文件夹下的图片减少一些。本以为没问题了,结果程序运行到stitcher就报错退出。反复调试还是这个问题。status显示ERR_NEED_MORE_IMAGES。难道是图片少了?加几张,也不对。反复的调呀,反复的调。其实都没有问题,可能是图片或者程序强制退出后,需要一段时间释放资源之类的东西,在这段时间内,有些资源是被占用的,运行程序就报错。退出VS2010,重新编译一次,程序运行就正常了。这么个小程序,连写带调用了四个小时。情何以堪呀。(ps:还发现一个问题,文件夹下如果还有文件夹可能会报错的。)
总结:stitcher函数使用方式建立一个imgs向量,将读取的mat图片用push_back压到imgs中。然后就是stitcher自己去拼接了。但是拼接的速度不敢恭维,两张图片大概需要7-8秒的时间。我用的是3872*2592大小的图片,用了27张拼接,跑了好久,现在还没跑完,所以没事干写博客记录这次不算成功的体验。
程序出现一些诸如图片已多就无法拼接的问题。一种原因是可能图片没有重叠部分,因此无法拼接。还有就是可能函数的问题。为了解决这个问题,更安全的运行程序,对代码进行微调,就是先压进两张照片,然后再执行合并过程,之后每找到一张图片就合并一次,这样,程序运行后就稳定的多,而且能实时看到合并的装填。当遇到文件名是rusult.jpg时,程序退出。
#include <iostream> #include <string> #include <io.h>#include <fstream>#include <opencv2/opencv.hpp> #include "opencv2/stitching/stitcher.hpp"#include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; int main(int argc, char** argv) { // 图片集 string fileFolderPath = "图片目录"; string fileExtension = "jpg"; string fileFolder = fileFolderPath + "\\*." + fileExtension; string filesaveName;vector<Mat> imgs;string result_name = "保存路径\\result.jpg";// 遍历文件夹 char fileName[1000];struct _finddata_t fileInfo; // 文件信息结构体 第一次查找 long findResult = _findfirst(fileFolder.c_str(), &fileInfo); if (findResult == -1) { _findclose(findResult); return -1; } 循环查找 Mat img1;Mat img2;Mat img3;do { sprintf(fileName, "%s\\%s", fileFolderPath.c_str(), fileInfo.name);filesaveName=fileFolderPath+"\\resize"+fileInfo.name;const char *p=filesaveName.c_str();if ( fileInfo.name != " ") { printf("file: %s\n",fileName);img1=imread(fileName); //需要缩小图片的话可以用这段 //Size sz;//pyrDown(img1,img2,sz,BORDER_DEFAULT);//pyrDown(img2,img3,sz,BORDER_DEFAULT);//pyrDown(img3,img3,sz,BORDER_DEFAULT);imgs.push_back(img1);//imwrite(p,img1);imshow("WindowNew",img1);waitKey(1);} } while (!_findnext(findResult, &fileInfo)); _findclose(findResult); destroyWindow("WindowNew");bool try_use_gpu = true;Mat pano; Stitcher stitcher = Stitcher::createDefault(try_use_gpu); Stitcher::Status status = stitcher.stitch(imgs, pano);if (status != Stitcher::OK) { cout << "Can't stitch images, error code = " << int(status) << endl; return -1; }imwrite(result_name, pano);return 0; }
- 初学opencv心得:imshow中断退出问题和stitcher报错问题
- 初学opencv心得:图片拼接Stitcher函数
- 【OpenCV】问题集锦【imread(),imshow()】
- OpenCV中imshow()出错问题
- OpenCV:imshow()/imwrite()数据类型问题
- 初学Opencv时候遇到的几个编译器报错问题
- 关于opencv里,imshow和cvShowImage之后不显示的问题
- opencv内存中断问题
- opencv内存中断问题
- 使用opencv的imshow函数时遇到segmentation fault问题
- ROS使用opencv cv::imshow闪退问题
- opencv 多线程显示imshow出现图片不更新的问题
- matlab的imshow问题
- 7.imshow显示问题
- Opencv中namedWindow和imshow
- 【一点点心得】 旧版ARToolkit和openCV整合问题
- vs2012配置opencv fopen报错问题
- 使用OpenCV FeatureDetector报错的问题
- 删除包时,报ORA-04043: object SYS_PLSQL×× dose not exists
- wait函数和waitpid函数比较
- Oracle数据库SqlLoad常用技巧总结(转载)
- 黑马程序员_JAVA动态代理技术学习笔记
- matlab 读取excel 数据
- 初学opencv心得:imshow中断退出问题和stitcher报错问题
- X86_X64
- JAVA 包.算法
- DLNA介绍(包括UPnP,2011/6/20 更新)
- JSON教程之JSON-lib包方法解析(JAVA)
- ubuntu获得root权限
- source insight 配置文件
- 《Head First 设计模式》组合模式
- 导出目录结构文档tree