美文网首页opencv for Java图像处理
opencv for java之——opencv调试利器Imag

opencv for java之——opencv调试利器Imag

作者: 侠之大者_7d3f | 来源:发表于2018-09-04 17:09 被阅读22次

    前言

    从事图像处理,计算机视觉编程的对opencv一定很熟悉,opencv就不用介绍了,opencv源码采用C++编写,底层为了加速还使用了CUDA C++,并行加速语言opencl。 一般使用C++的开发opencv大多使用宇宙第一IDE——Visual Studio (windows), Linux上使用Clion,Qt等。笔者今天介绍一个基于windows+visual studio下的opencv调试神奇——Image watch插件。

    目前Image watch还没有Java版本的,欢迎各路大神开发插件


    开发环境


    介绍

    Image watch 插件

    • 下载地址
      在微软官网即可下载,没必要买积分在csdn下载哦。 下载链接在上面已经贴出来了。

      图片.png
    • 用途
      可以在调试过程中查看opencv中Mat对象的内容,可视化功能强大。 最新的Image watch插件还可以查看 cv::Mat_<>,CvMat,_lplImage对象的内容。
      注意:使用opencv dnn深度学习使用,Mat blobMat = blobFromImage(Image), 这个Mat对象是4维的张量,是不能直接用这个插件看内容的

    图片.png
    • 注意事项
      安装之前,请查看自己visual Studio的具体版本信息。有的版本的vs可能出问题,别慌。


      图片.png
    图片.png

    测试

    • 配置好opencv(版本大于3.2.0)
    • 准备2张图像,一个灰度图像,一个rgb彩色图像

    测试代码

    #include<iostream>
    #include<opencv2/opencv.hpp>
    #include<opencv2/dnn.hpp>
    
    using std::cout;
    
    using cv::String;
    using cv::Mat;
    using cv::Mat_;
    using cv::imread;
    using cv::ImreadModes;
    using cv::imshow;
    using cv::waitKey;
    using cv::dnn::blobFromImage;
    
    int main() {
    
        //灰度图
        Mat var1 = imread("F:\\lena\\lena_gray.jpg", ImreadModes::IMREAD_GRAYSCALE);
    
        //BGR三通道
        Mat var2 = imread("F:\\lena\\lena_rgb.jpg", ImreadModes::IMREAD_COLOR);
    
        //单通道float
        Mat_<float> var3 = imread("F:\\lena\\lena_gray.jpg", ImreadModes::IMREAD_GRAYSCALE);
    
        //4D张量
        Mat var4 = blobFromImage(var2);
    
        cout << "测试opencv Image watch插件";
        waitKey(0);
    }
    
    

    代码很简单,注意

    • ImreadModes是一个枚举,IMREAD_GRAYSCALE说明读取灰度图像。IMREAD_COLOR为彩色图像(BGR顺序)。
    • Mat_<float>是一个模板类,数据为浮点类型。
    • blobFromImage()函数是cv::dnn中的函数。返回的Mat是4维张量(NCHW)。

    测试结果

    1. 首先,Image watch插件是在 视图->其他窗口中。可以将插件固定在vs上,也可悬浮。

      图片.png
    2. 需要在加端点的时候调试


      图片.png
    3. 灰度图像的可视化


      图片.png
    4. 鼠标滚轮可以放大缩小,查看具体像素的值


      图片.png
    5. BGR彩色图像可视化


      图片.png

    注意,BGR顺序


    图片.png
    1. 浮点类型Mat可视化


      图片.png
    2. 4维张量可视化
      Image watch是无法直接可视化4D的高维矩阵的

      图片.png

    深入了解一个4维张量
    Mat对象中,有一个成员变量(属性)size, 类型是MatSize,MatSize是一个结构体,包含一个指针p用于存储张量在各个维度的大小

    图片.png 图片.png

    无法直接看到4维张量在不同维度的大小,显示1x-1x-1。为此我们只能查看内存。


    鼠标点击右键,快速监视

    图片.png

    输入要查看的变量,以及个数。这里我们看出p指针的4个单元,发现是 1,3,512,512。 也就是说张量为1x3x512x512


    图片.png

    End

    本次笔者主要探索了Image watch插件的功能,以及了解深度学习dnn的4维张量。 感谢甜心对我的支持,fighting !

    相关文章

      网友评论

        本文标题:opencv for java之——opencv调试利器Imag

        本文链接:https://www.haomeiwen.com/subject/qtagwftx.html