• opencv3 一.图像基本操作及问题


    从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

  • 相关阅读:
    在javaWeb 工程中 tomcat 的 web.xml 文件配置
    Spring 框架详解
    构建工具 Maven和Gradle对比
    idea 创建Javaweb 动态工程
    服务器后端 项目代码常用目录图
    ET模式下的EPOLLOUT
    linux recv 参数len设置为0
    fork 和 exec 对子进程继承父进程处理信号处理函数的影响
    lua元表以及元方法
    Linux网络编程“惊群”问题总结
  • 原文地址:https://www.cnblogs.com/wangzhizhen/p/8682590.html
Copyright © 2020-2023  润新知