#include #include "NVX/nvx.h" #include "NVX/nvx_opencv_interop.hpp" #include "opencv2/opencv.hpp" #include #include "NVX/Utility.hpp" //#include "NVX/FrameSource.hpp" //#include "NVX/nvxcu.h" int main(int argc, char **argv) { FLAGS_alsologtostderr = 1; google::InitGoogleLogging(argv[0]); vx_context context = vxCreateContext(); // 输入 std::string sourceUri = "./rocket.jpg"; cv::Mat cv_src = cv::imread(sourceUri, cv::IMREAD_GRAYSCALE); vx_image source = nvx_cv::createVXImageFromCVMat(context, cv_src); LOG(INFO) << "cv load image"; // vx_image source = nvxio::loadImageFromFile(context, sourceUri, VX_DF_IMAGE_U8); vx_uint32 width, height; vxQueryImage(source, VX_IMAGE_WIDTH, &width, sizeof(width)); vxQueryImage(source, VX_IMAGE_HEIGHT, &height, sizeof(height)); //输出 cv::Mat cv_dst(cv_src.size(), cv_src.type()); // vx_image edges = vxCreateImage(context, width, height, VX_DF_IMAGE_U8); vx_image edges = nvx_cv::createVXImageFromCVMat(context, cv_dst); vx_threshold hyst = vxCreateThreshold(context, VX_THRESHOLD_TYPE_RANGE, VX_TYPE_INT16); vx_int32 lowerThresh = 230, upperThresh = 250; vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_LOWER, &lowerThresh, sizeof(lowerThresh)); vxSetThresholdAttribute(hyst, VX_THRESHOLD_THRESHOLD_UPPER, &upperThresh, sizeof(upperThresh)); LOG(INFO) << "set up threshold"; // Finally, the VisionWorks primitives are called in immediate mode. // Note that intermediate data objects are created as normal images. vx_image filtered = vxCreateImage(context, width, height, VX_DF_IMAGE_U8); vx_image equalized = vxCreateImage(context, width, height, VX_DF_IMAGE_U8); LOG(INFO) << "ready to go."; vxuMedian3x3(context, source, filtered); LOG(INFO) << "done filter 3x3"; vxuEqualizeHist(context, filtered, equalized); LOG(INFO) << "done equalize hist"; vxuCannyEdgeDetector(context, equalized, hyst, 3, VX_NORM_L1, edges); LOG(INFO) << "done canny edge"; { // save time_t now = time(0); char *dt = ctime(&now); cv::imwrite("edge_out" + std::string(dt) + ".jpg", cv_dst); } vxReleaseImage(&filtered); vxReleaseImage(&equalized); cv_src.release(); cv_dst.release(); LOG(INFO) << "done release"; return 0; }