本科学电磁场,研究生学阵列信号处理,本以为毕业可以进研究所为军工雷达做点贡献。不成想,最后成为了一名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初试云雨相关推荐

  1. FFmpeg转OpenCV Mat显示

    FFmpeg一般采用SDL进行显示,如果不追求复杂的界面.交互和多线程功能,当然也可以使用OpenCV的imshow()方法进行显示了,而且实现起来比SDL更简单.方法也很简单,只需要把视频帧的BGR ...

  2. 孙尚香缘何爱上“刘大叔”东湖少主v新浪博客

    赤壁战役之后,刘备刘大叔的激情岁月就开始了. 世上的事情就是这样,人要是倒霉了,喝口凉水都塞牙:人要是顺风顺水了,什么好事都会找上门,挡都挡不住.自从成功占据荆州之后,刘备是四处用兵,网站地图,势力范 ...

  3. OpenCV在Linux上的安装及初试

    // linux opencv安装及初试 // 2015.11.20 created by Huangtao 官方教程: ========= Installation in Linux These s ...

  4. opencv入门 - 显示图像学习总结

    OpenCV的第一个小程序-读取图像并显示 首先新建一个VC++控制台项目如下图所示.本文项目名称helloOpenCV. 在主文件中添加如下代码: #include "stdafx.h&q ...

  5. OpenCV实现最大最小距离聚类算法

    OpenCV实现最大最小距离聚类算法 [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/80255524 本博客提供多版本的 ...

  6. 基于OpenCV 的车道线检测方法

    车道线检测是图像处理运用到无人驾驶的一项技术,目前也过渡到了部分汽车上,高速公路的自动车道保持就是一个应用. 最近研究了两个基于opencv的车道检的代码,先放链接: A.Udacity车道线检测代码 ...

  7. OpenCV视频目标跟踪及背景分割器

    目标跟踪 本文主要介绍cv2中的视频分析Camshift和Meanshift. 目标: 学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体 Meanshift算法: mean ...

  8. python opencv入门 Meanshift 和 Camshift 算法(40)

    内容来自OpenCV-Python Tutorials 自己翻译整理 目标: 在本章,学习Meanshift算法和Camshift算法来寻找和追踪视频中的目标物体. Meanshift算法: mean ...

  9. 写在前面的一些话:《Learning OpenCV》中文版 .

    2009-09-17 15:51 7578人阅读 评论(4) 收藏 举报 <!-- /* Font Definitions */ @font-face {font-family:Helvetic ...

最新文章

  1. java时间计算,获取某月第一天和最后一天
  2. 远程无法连接svn服务器失败_windows vscode 远程连接linux服务器
  3. mfc 监控文件操作_实战经验:使用CFileDialog实现多个文件选择
  4. java 堆转储快照_Java堆转储:您可以完成任务吗?
  5. lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑
  6. c++ socket学习(1.2)
  7. java排序算法大全_各种排序算法的分析及java实现
  8. 一步一步写算法(之递归和堆栈)
  9. QT学习-核心类列表-4、Qt WebKit Widgets 5、Qt3DCore
  10. Leetcode每日一题:493.reverse-pairs(翻转对)
  11. Linux进程地址空间布局
  12. 风光储互补发电系统直流微网风能和光伏采用最大功率点跟踪控制
  13. 国际电话区号 mysql数据表
  14. linux系统怎样设置分屏显示器,话说你们的双屏显示器是怎样设置的 尤其是外接显示器分辨率设置...
  15. 【GD32学习】五、片内Flash读写实验-闪存控制器FMC
  16. 【懒懒的Python学习笔记九】
  17. Python 根据身高体重计算BMI值
  18. 【Lua从青铜到王者基础篇】第一篇:Lua初始教程和环境安装
  19. 语录集人生---投资
  20. react+antd解决报错:Module not found: Can't resolve 'antd/es/affix'

热门文章

  1. 计算机教室规则英语作文,班级规则初中英语作文
  2. 微信广告+视频号,营销能力全面盘点,视频号是否能做新突破?
  3. vim从入门到丝滑学习笔记
  4. 阿里云免费SSL证书续费步骤 TOMCAT
  5. alert 弹出框的操作
  6. XR872图传声传小例程——无线传输
  7. iPhone 14连夜跌至4800元,现在应该直接入手14,还是等15?
  8. C# arcengine 属性快速浏览
  9. biosequence analysis using profile hidden Markov models(使用隐马尔可夫模型分析序列)
  10. 《痞子衡嵌入式半月刊》 第 69 期