| | |
| |
|
| | |
| | #include <opencv2/opencv.hpp> |
| | |
| | #define OPENPOSE_FLAGS_DISABLE_POSE |
| | #include <openpose/flags.hpp> |
| | |
| | #include <openpose/headers.hpp> |
| |
|
| | #ifdef USE_CUDA |
| | #ifdef USE_CAFFE |
| | #include <caffe/net.hpp> |
| | #endif |
| |
|
| | DEFINE_string(image_path, "examples/media/COCO_val2014_000000000192.jpg", "Process the desired image."); |
| |
|
| | cv::Mat gpuResize(cv::Mat& img, const cv::Size& newSize) |
| | { |
| | #if defined USE_CAFFE && defined USE_CUDA |
| | |
| | float* cpuPtr = &img.at<float>(0); |
| | float* gpuPtr; |
| | cudaMallocHost((void **)&gpuPtr, img.size().width * img.size().height * sizeof(float)); |
| | cudaMemcpy(gpuPtr, cpuPtr, img.size().width * img.size().height * sizeof(float), |
| | cudaMemcpyHostToDevice); |
| |
|
| | |
| | cv::Mat newImg = cv::Mat(newSize,CV_32FC1,cv::Scalar(0)); |
| | float* newCpuPtr = &newImg.at<float>(0); |
| | float* newGpuPtr; |
| | cudaMallocHost((void **)&newGpuPtr, newSize.width * newSize.height * sizeof(float)); |
| | cudaMemcpy(newGpuPtr, newCpuPtr, newSize.width * newSize.height * sizeof(float), |
| | cudaMemcpyHostToDevice); |
| |
|
| | std::vector<const float*> sourcePtrs; |
| | sourcePtrs.emplace_back(gpuPtr); |
| | std::array<int, 4> targetSize = {1,1,newImg.size().height,newImg.size().width}; |
| | std::array<int, 4> sourceSize = {1,1,img.size().height,img.size().width}; |
| | std::vector<std::array<int, 4>> sourceSizes; |
| | sourceSizes.emplace_back(sourceSize); |
| | op::resizeAndMergeGpu(newGpuPtr, sourcePtrs, targetSize, sourceSizes); |
| | cudaMemcpy(newCpuPtr, newGpuPtr, newImg.size().width * newImg.size().height * sizeof(float), |
| | cudaMemcpyDeviceToHost); |
| |
|
| | cudaFree(gpuPtr); |
| | cudaFree(newGpuPtr); |
| | return newImg; |
| | #else |
| | UNUSED(img); |
| | UNUSED(newSize); |
| | op::error("OpenPose must be compiled with the `USE_CAFFE` & `USE_CUDA` macro definitions in order to run" |
| | " this functionality.", __LINE__, __FUNCTION__, __FILE__); |
| | return cv::Mat(); |
| | #endif |
| | } |
| |
|
| | cv::Mat cpuResize(cv::Mat& img, cv::Size newSize) |
| | { |
| | |
| | float* cpuPtr = &img.at<float>(0); |
| |
|
| | |
| | cv::Mat newImg = cv::Mat(newSize,CV_32FC1,cv::Scalar(0)); |
| |
|
| | std::vector<const float*> sourcePtrs; |
| | sourcePtrs.emplace_back(cpuPtr); |
| | std::array<int, 4> targetSize = {1,1,newImg.size().height,newImg.size().width}; |
| | std::array<int, 4> sourceSize = {1,1,img.size().height,img.size().width}; |
| | std::vector<std::array<int, 4>> sourceSizes; |
| | sourceSizes.emplace_back(sourceSize); |
| | op::resizeAndMergeCpu(&newImg.at<float>(0), sourcePtrs, targetSize, sourceSizes); |
| |
|
| | return newImg; |
| | } |
| |
|
| | int resizeTest() |
| | { |
| | try |
| | { |
| | |
| | op::Matrix opImg = op::loadImage(FLAGS_image_path, op::getCvLoadImageGrayScale()); |
| | cv::Mat img = OP_OP2CVMAT(opImg); |
| | if(img.empty()) |
| | op::error("Could not open or find the image: " + FLAGS_image_path, __LINE__, __FUNCTION__, __FILE__); |
| | img.convertTo(img, CV_32FC1); |
| | img = cpuResize(img, cv::Size(img.size().width/4,img.size().height/4)); |
| | img*=0.005; |
| |
|
| | cv::Mat gpuImg = gpuResize(img, cv::Size(img.size().width*8,img.size().height*8)); |
| | cv::Mat cpuImg = cpuResize(img, cv::Size(img.size().width*8,img.size().height*8)); |
| | cv::imshow("gpuImg", gpuImg); |
| | cv::imshow("cpuImg", cpuImg); |
| |
|
| | op::opLog("Done"); |
| | cv::waitKey(0); |
| |
|
| | return 0; |
| | } |
| | catch (const std::exception& e) |
| | { |
| | op::error(e.what(), __LINE__, __FUNCTION__, __FILE__); |
| | return -1; |
| | } |
| | } |
| | #endif |
| |
|
| | int main(int argc, char *argv[]) |
| | { |
| | #ifdef USE_CUDA |
| | |
| | gflags::ParseCommandLineFlags(&argc, &argv, true); |
| |
|
| | |
| | return resizeTest(); |
| | #else |
| | op::error("OpenPose must be compiled with the `USE_CAFFE` & `USE_CUDA` macro definitions in order to run" |
| | " this functionality.", __LINE__, __FUNCTION__, __FILE__); |
| | return 0; |
| | #endif |
| | } |
| |
|