3 #include "opencv2/core/utility.hpp"
4 #include "opencv2/core/ippasync.hpp"
5 #include "opencv2/imgproc.hpp"
6 #include "opencv2/highgui.hpp"
8 #define CHECK_STATUS(STATUS, NAME)\
9 if(STATUS!=HPP_STATUS_NO_ERROR){ printf("%s error %d\n", NAME, STATUS);\
10 if (virtMatrix) {hppStatus delSts = hppiDeleteVirtualMatrices(accel, virtMatrix); CHECK_DEL_STATUS(delSts,"hppiDeleteVirtualMatrices");}\
11 if (accel) {hppStatus delSts = hppDeleteInstance(accel); CHECK_DEL_STATUS(delSts, "hppDeleteInstance");}\
14 #define CHECK_DEL_STATUS(STATUS, NAME)\
15 if(STATUS!=HPP_STATUS_NO_ERROR){ printf("%s error %d\n", NAME, STATUS); return -1;}
23 printf("\nThis program shows how to use the conversion for IPP Async.\n"
24 "This example uses the Sobel filter.\n"
25 "You can use cv::Sobel or hppiSobel.\n"
27 "./ipp_async_sobel [--camera]=<use camera,if this key is present>, \n"
28 " [--file_name]=<path to movie or image file>\n"
29 " [--accel]=<accelerator type: auto (default), cpu, gpu>\n\n");
34 "{c camera | | use camera or not}"
35 "{fn file_name|baboon.jpg | image file }"
36 "{a accel |cpu | accelerator type: auto (default), cpu, gpu}"
39 //this is a sample for hppiSobel functions
40 int main(int argc, const char** argv)
45 Mat image, gray, result;
47 Ptr<hppiMatrix> src, dst;
49 hppAccelType accelType;
51 hppiVirtualMatrix * virtMatrix;
53 CommandLineParser parser(argc, argv, keys);
54 bool useCamera = parser.has("camera");
55 string file = parser.get<string>("file_name");
56 string sAccel = parser.get<string>("accel");
58 parser.printMessage();
62 printf("used camera\n");
67 printf("used image %s\n", file.c_str());
68 cap.open(file.c_str());
73 printf("can not open camera or video file\n");
77 accelType = sAccel == "cpu" ? HPP_ACCEL_TYPE_CPU:
78 sAccel == "gpu" ? HPP_ACCEL_TYPE_GPU:
81 //Create accelerator instance
82 sts = hppCreateInstance(accelType, 0, &accel);
83 CHECK_STATUS(sts, "hppCreateInstance");
85 accelType = hppQueryAccelType(accel);
87 sAccel = accelType == HPP_ACCEL_TYPE_CPU ? "cpu":
88 accelType == HPP_ACCEL_TYPE_GPU ? "gpu":
89 accelType == HPP_ACCEL_TYPE_GPU_VIA_DX9 ? "gpu":
90 accelType == HPP_ACCEL_TYPE_OCL ? "ocl": "?";
92 printf("accelType %s\n", sAccel.c_str());
94 virtMatrix = hppiCreateVirtualMatrices(accel, 1);
102 cvtColor( image, gray, COLOR_BGR2GRAY );
104 result.create( image.rows, image.cols, CV_8U);
106 double execTime = (double)getTickCount();
108 //convert Mat to hppiMatrix
110 dst = getHpp(result);
112 sts = hppiSobel(accel,src, HPP_MASK_SIZE_3X3,HPP_NORM_L1,virtMatrix[0]);
113 CHECK_STATUS(sts,"hppiSobel");
115 sts = hppiConvert(accel, virtMatrix[0], 0, HPP_RND_MODE_NEAR, dst, HPP_DATA_TYPE_8U);
116 CHECK_STATUS(sts,"hppiConvert");
118 // Wait for tasks to complete
119 sts = hppWait(accel, HPP_TIME_OUT_INFINITE);
120 CHECK_STATUS(sts, "hppWait");
122 execTime = ((double)getTickCount() - execTime)*1000./getTickFrequency();
124 printf("Time : %0.3fms\n", execTime);
126 imshow("image", image);
127 imshow("rez", result);
137 sts = hppiDeleteVirtualMatrices(accel, virtMatrix);
138 CHECK_DEL_STATUS(sts,"hppiDeleteVirtualMatrices");
143 sts = hppDeleteInstance(accel);
144 CHECK_DEL_STATUS(sts, "hppDeleteInstance");