opencv for java之——opencv调试利器Imag
前言
从事图像处理,计算机视觉编程的对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版本的,欢迎各路大神开发插件
开发环境
- windows10 64bit
- visual studio 2017 (version 15.8.2)
- opencv 3.4.0
- Image watch插件
介绍
Image watch 插件
-
下载地址
图片.png
在微软官网即可下载,没必要买积分在csdn下载哦。 下载链接在上面已经贴出来了。
-
用途
可以在调试过程中查看opencv中Mat对象的内容,可视化功能强大。 最新的Image watch插件还可以查看cv::Mat_<>,CvMat,_lplImage
对象的内容。
注意:使用opencv dnn深度学习使用,Mat blobMat = blobFromImage(Image)
, 这个Mat对象是4维的张量,是不能直接用这个插件看内容的
-
注意事项
安装之前,请查看自己visual Studio的具体版本信息。有的版本的vs可能出问题,别慌。
图片.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)。
测试结果
-
首先,Image watch插件是在 视图->其他窗口中。可以将插件固定在vs上,也可悬浮。
图片.png
-
需要在加端点的时候调试
图片.png -
灰度图像的可视化
图片.png -
鼠标滚轮可以放大缩小,查看具体像素的值
图片.png -
BGR彩色图像可视化
图片.png
注意,BGR顺序
图片.png
-
浮点类型Mat可视化
图片.png -
4维张量可视化
图片.png
Image watch是无法直接可视化4D的高维矩阵的。
深入了解一个4维张量
在Mat
对象中,有一个成员变量(属性)size
, 类型是MatSize
,MatSize
是一个结构体,包含一个指针p用于存储张量在各个维度的大小
无法直接看到4维张量在不同维度的大小,显示1x-1x-1。为此我们只能查看内存。
鼠标点击右键,快速监视
输入要查看的变量,以及个数。这里我们看出p指针的4个单元,发现是 1,3,512,512。 也就是说张量为1x3x512x512
图片.png
End
本次笔者主要探索了Image watch插件的功能,以及了解深度学习dnn的4维张量。 感谢甜心对我的支持,fighting !