C++ OpenCV使用Image Watch来查看GPU灰度化的Lena

之前的文章 中已经写过了如何新建OpenCV空项目,也介绍过OpenCV最基本的三个操作了,我在OpencvProject中定义了一个头文件cv.hpp,里面包含的头文件如下:

#include <opencv2/opencv.hpp>
#include <opencv2/opencv_modules.hpp>
#include <opencv2/dnn.hpp>
#include <opencv2/cudaarithm.hpp>
#include <opencv2/cudaoptflow.hpp>
#include <opencv2/cudaimgproc.hpp>
#include <opencv2/cudafeatures2d.hpp>
#include <opencv2/cudaobjdetect.hpp>
#include <opencv2/cudawarping.hpp>
#include <opencv2/cudafilters.hpp>
#include <bits/stdc++.h>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2\imgproc\types_c.h>
using namespace std;
using namespace cv;
using namespace cv::cuda;
using namespace cv::dnn;

然后我写的 Hello Lena 是把图像upload传给GPU,在GPU中调用cuda::cvtColor()函数将图像进行灰度化处理后再download传递回来,main.cpp中的内容如下:

#include "cv.hpp"
string IMG_PATH = "D:/Code/CppCode/OpencvProject/img/";

int main() {
    cout << "Built with OpenCV " << CV_VERSION << endl;
    Mat src_host = imread(IMG_PATH+"lena.png",1);
    GpuMat src, gray;
    src.upload(src_host);
    cuda::cvtColor(src, gray,COLOR_BGR2GRAY);
    Mat gray_host;
    gray.download(gray_host);
    imshow("src",src_host);
    imshow("gray",gray_host);
    imwrite(IMG_PATH+"gray_lena.png",gray_host);
    waitKey(0);
    return 0;
}

我在菜单栏拓展管理拓展联机中下载了Image Watch 2019,重启VS2019 安装完成后可在菜单栏视图其他窗口Image Watch中找到。这样在程序中的waitKey()处设置断点,就能在Image Watch中看到原图像和GPU灰度化处理的图像了,而不是弹出两个图像窗口。 在相应的目录也能找到 imwrite 保存的灰度化图像。