从C++转到cv3上手很顺利,CV3大量使用C++的类。
创建用于保存图像的对象,使用Mat类;
读取图片数据,使用Mat类的 imread();方法
可以直接以图片的格式显示图片 也是Mat类中的方法:imshow(name,img)
注在使用imshow(name,img)之前 最好使用 namedWindow(name)全局函数,先创建一个窗体,用以容纳我们的图片。
最后不要忘记 waitKey();否则运行会一闪而过
代码如下:
#include <core.hpp> #include <highgui.hpp> using namespace cv; int main() { Mat img = imread("D:/bitmap/10.bmp"); namedWindow("原始图片",1); imshow("原始图片", img); waitKey(); }
问题:
在debug先运行,如果有imshow(),会发现有两个窗体出现,一个什么都没有显示是空白的,另一个是我们的图片。
为什么会出现这个问题,目前还没找到原因,另外如果关闭 显示内容是我们的图片那个窗体,会出现一个断点异常,而如果是点击上面那个 什么都没有显示的窗体进行关闭,则不会出现错误。
如下图:
如果在调用imshow()之前不先调用 namedWindow(),运行会发现窗口会闪过。
而如果调用namedWindow(),则会出现一个什么都会显示的窗体。当要显示的图片很多的时候,又选择使用每张图片使用一个单独的窗体的时候,每张图片就会跟随一个多余的窗体,非常乱
见下图原始图像和 灰度图像还有 边缘检测 三张图的画面:
解决方法是在编译运行的时候,不要选 debug ,选择release进行编译 就可以避免 ,而且任意关闭哪个窗口,都不会出现异常
下面是release 编译运行的结果: