云中孤鹤

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从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(),会发现有两个窗体出现,一个什么都没有显示是空白的,另一个是我们的图片。

为什么会出现这个问题,目前还没找到原因,另外如果关闭 显示内容是我们的图片那个窗体,会出现一个断点异常,而如果是点击上面那个 什么都没有显示的窗体进行关闭,则不会出现错误。

如下图:

image image

如果在调用imshow()之前不先调用 namedWindow(),运行会发现窗口会闪过。

而如果调用namedWindow(),则会出现一个什么都会显示的窗体。当要显示的图片很多的时候,又选择使用每张图片使用一个单独的窗体的时候,每张图片就会跟随一个多余的窗体,非常乱

见下图原始图像和 灰度图像还有 边缘检测 三张图的画面:

image

 

解决方法是在编译运行的时候,不要选 debug image,选择release进行编译 就可以避免 image,而且任意关闭哪个窗口,都不会出现异常

下面是release 编译运行的结果:

image

posted on 2018-03-31 15:51  云中孤鹤  阅读(383)  评论(1编辑  收藏  举报