OpenCV初试云雨
本科学电磁场,研究生学阵列信号处理,本以为毕业可以进研究所为军工雷达做点贡献。不成想,最后成为了一名Android(系统级)开发工程师,而且一干就干了将近三年。或者,也可以就这样干下去,逆来顺受也算是本份庄稼人的特点。但是,进城待久了,又忍不住东想西想。作为第一代进城的庄稼人,矛盾就这样在身体内来回撺掇,这种滋味说实话……怪不得人家都说平淡是福。开始,一有矛盾,我就用打游戏来调和——连输几局之后,什么想法都没有了。可是,最近堕落得游戏都不想打了,苦恼!听说数字图像处理在人工智能上能有用,人工智能又据说会很火。既然都是荒废生命,就换一个方式吧,来学学OpenCV,只是不知道能坚持多长时间!!管不了那么多了,男人,哪怕多坚持一秒也很屌了,开干!
网上搜索了一下,要下载OpenCV和VS。我一般都喜欢下载最新的,对于菜鸟来说,时间上领先也算是一种领先吧。
1.首先我就下载了VS2017和OpenCV3.4.1,还挺顺利,都下载下来了。
2.安装VS2017和OpenCV,然后为OpenCV添加环境变量。
安装VS2017的时候才发现,自己的硬盘空间不够了。15年底买电脑的时候,为了开机快和省钱,就配了一个128G的固态硬盘,心想着也够用了,比我退役的笔记本空间大多了。本来嘛,虽然是打着学习Android配的电脑,但是主要用途还是打游戏……没办法,又买了1T的机械硬盘。安装硬盘也是耽误了我近一周的时间,想想都惭愧,因为买硬盘的时候我都没有想过还需要一个电源线和mount用的数据线……
3.打开VS2017,然后照着网上说的新建一个项目。
悲剧就这个时候发生了,原来win7是用不了VS2017的。唉,别的都好说,就是这个操作系统我最讨厌换了,上学的时候换一次坑一次。这次没办法,升级win10吧。还是去网上搜,找到了一个升级工具,花了将近两天的时间(加班太多),最终没有升级成功!!!还检测出来我的操作系统不是正版,一个劲儿的让我激活。网上找了个激活码,这事儿就做罢了。东西都还没学到手,想让我花钱来买操作系统,我觉得还是挺难的。
4.卸载VS2017,重新卸载其他版本的VS。这次我一共下载了2017以下的四五个版本,首先还是从VS2015开始试水。幸运的是,VS2015完全没问题。
5.打开VS2015,新建了一个项目。按照网上的描述,创建的是win32控制台程序(还不清楚原因,比葫芦画瓢呗)和空项目。接着是在属性窗口的VC++目录下添加包含目录和库目录。http://www.bubuko.com/infodetail-1479420.html 我参考了很多人的博客,这个算是一个。
6.demo程序验证。
#include<opencv2\opencv.hpp>
using namespace cv;
int main()
{Mat picture = imread("wallpaper.jpg");//图片必须添加到工程目录下//也就是和test.cpp文件放在一个文件夹下!!!imshow("测试程序", picture);waitKey(20150901);
}
这个也是上面博客上的demo,但是测试的时候总是有问题。可能是版本不一样?编译都过不了!参照下面博文https://blog.csdn.net/cooelf/article/details/24499473 启用源服务器调试。这样,之前的问题解决了,但是新的问题也出现了。跑出来的图片秒消失。网上说用waitKey才显示,后面发现加上system("pause");挺好使。这个时候图片窗口出来了,只是显示的是一团灰。网上有说是图片没有加载上来,然后就加了下面的语句去判断,发现并不是。最后试了在imshow之前加了namedWindow("test");这次真的出现了,嗨开森!
if (picture.empty()){std::cout << "Can not load image" << "\n";return -1;}
最终代码:
#include "cv.h" // OpenCV 文件头#include "highgui.h"#include "cvaux.h"#include "cxcore.h"#include "opencv2/opencv.hpp"#include "opencv2/imgproc.hpp"#include <iostream>#include <string>using namespace cv;using namespace std;int main()
{double fscale = 1;Size outsize;Mat picture = imread("F:\\VS2015\\ConsoleApplication1\\ConsoleApplication1\\ran.jpg");if (picture.empty()){std::cout << "Can not load image" << "\n";return -1;}outsize.width = picture.cols*fscale;outsize.height = picture.rows*fscale;Mat outpic;resize(picture, outpic, outsize, 0, 0, INTER_AREA);//图片必须添加到工程目下//也就是和test.cpp文件放在一个文件夹下!!!namedWindow("test");imshow("test", outpic);waitKey(0);system("pause");
}
PS:为什么imshow前面要加上nameWindow,网上也没有明确说。看了一下源码:
void cv::imshow( const String& winname, InputArray _img )
{CV_TRACE_FUNCTION();const Size size = _img.size();
#ifndef HAVE_OPENGLCV_Assert(size.width>0 && size.height>0);{Mat img = _img.getMat();CvMat c_img = img;cvShowImage(winname.c_str(), &c_img);}
#elseconst double useGl = getWindowProperty(winname, WND_PROP_OPENGL);CV_Assert(size.width>0 && size.height>0);if (useGl <= 0){Mat img = _img.getMat();CvMat c_img = img;cvShowImage(winname.c_str(), &c_img);}else{const double autoSize = getWindowProperty(winname, WND_PROP_AUTOSIZE);if (autoSize > 0){resizeWindow(winname, size.width, size.height);}setOpenGlContext(winname);cv::ogl::Texture2D& tex = ownWndTexs[winname];if (_img.kind() == _InputArray::CUDA_GPU_MAT){cv::ogl::Buffer& buf = ownWndBufs[winname];buf.copyFrom(_img);buf.setAutoRelease(false);tex.copyFrom(buf);tex.setAutoRelease(false);}else{tex.copyFrom(_img);}tex.setAutoRelease(false);setOpenGlDrawCallback(winname, glDrawTextureCallback, &tex);updateWindow(winname);}
#endif
}
这里传入的windowname是一个常量引用,可能是要通过namedWindow创建一个window才能引用?但是,我发现当namedWindow和imshow传入的windowname不相等时也可以显示出来图片,只是会多一个灰色的窗口。暂时搞不懂了!
先到这里了,希望坚持!
OpenCV初试云雨相关推荐
- FFmpeg转OpenCV Mat显示
FFmpeg一般采用SDL进行显示,如果不追求复杂的界面.交互和多线程功能,当然也可以使用OpenCV的imshow()方法进行显示了,而且实现起来比SDL更简单.方法也很简单,只需要把视频帧的BGR ...
- 孙尚香缘何爱上“刘大叔”东湖少主v新浪博客
赤壁战役之后,刘备刘大叔的激情岁月就开始了. 世上的事情就是这样,人要是倒霉了,喝口凉水都塞牙:人要是顺风顺水了,什么好事都会找上门,挡都挡不住.自从成功占据荆州之后,刘备是四处用兵,网站地图,势力范 ...
- OpenCV在Linux上的安装及初试
// linux opencv安装及初试 // 2015.11.20 created by Huangtao 官方教程: ========= Installation in Linux These s ...
- opencv入门 - 显示图像学习总结
OpenCV的第一个小程序-读取图像并显示 首先新建一个VC++控制台项目如下图所示.本文项目名称helloOpenCV. 在主文件中添加如下代码: #include "stdafx.h&q ...
- OpenCV实现最大最小距离聚类算法
OpenCV实现最大最小距离聚类算法 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/80255524 本博客提供多版本的 ...
- 基于OpenCV 的车道线检测方法
车道线检测是图像处理运用到无人驾驶的一项技术,目前也过渡到了部分汽车上,高速公路的自动车道保持就是一个应用. 最近研究了两个基于opencv的车道检的代码,先放链接: A.Udacity车道线检测代码 ...
- OpenCV视频目标跟踪及背景分割器
目标跟踪 本文主要介绍cv2中的视频分析Camshift和Meanshift. 目标: 学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体 Meanshift算法: mean ...
- python opencv入门 Meanshift 和 Camshift 算法(40)
内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 在本章,学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体. Meanshift算法: mean ...
- 写在前面的一些话:《Learning OpenCV》中文版 .
2009-09-17 15:51 7578人阅读 评论(4) 收藏 举报 <!-- /* Font Definitions */ @font-face {font-family:Helvetic ...
最新文章
- java时间计算,获取某月第一天和最后一天
- 远程无法连接svn服务器失败_windows vscode 远程连接linux服务器
- mfc 监控文件操作_实战经验:使用CFileDialog实现多个文件选择
- java 堆转储快照_Java堆转储:您可以完成任务吗?
- lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑
- c++ socket学习(1.2)
- java排序算法大全_各种排序算法的分析及java实现
- 一步一步写算法(之递归和堆栈)
- QT学习-核心类列表-4、Qt WebKit Widgets 5、Qt3DCore
- Leetcode每日一题:493.reverse-pairs(翻转对)
- Linux进程地址空间布局
- 风光储互补发电系统直流微网风能和光伏采用最大功率点跟踪控制
- 国际电话区号 mysql数据表
- linux系统怎样设置分屏显示器,话说你们的双屏显示器是怎样设置的 尤其是外接显示器分辨率设置...
- 【GD32学习】五、片内Flash读写实验-闪存控制器FMC
- 【懒懒的Python学习笔记九】
- Python 根据身高体重计算BMI值
- 【Lua从青铜到王者基础篇】第一篇:Lua初始教程和环境安装
- 语录集人生---投资
- react+antd解决报错:Module not found: Can't resolve 'antd/es/affix'