1793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include <stdio.h> 2793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 3793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/core/utility.hpp" 4793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/imgproc.hpp" 5793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/highgui.hpp" 6793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "cvconfig.h" 7793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 8793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace std; 9793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerusing namespace cv; 10793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 11793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#ifdef HAVE_IPP_A 12793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#include "opencv2/core/ippasync.hpp" 13793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 14793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define CHECK_STATUS(STATUS, NAME)\ 15793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if(STATUS!=HPP_STATUS_NO_ERROR){ printf("%s error %d\n", NAME, STATUS);\ 16793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (virtMatrix) {hppStatus delSts = hppiDeleteVirtualMatrices(accel, virtMatrix); CHECK_DEL_STATUS(delSts,"hppiDeleteVirtualMatrices");}\ 17793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (accel) {hppStatus delSts = hppDeleteInstance(accel); CHECK_DEL_STATUS(delSts, "hppDeleteInstance");}\ 18793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return -1;} 19793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 20793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#define CHECK_DEL_STATUS(STATUS, NAME)\ 21793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if(STATUS!=HPP_STATUS_NO_ERROR){ printf("%s error %d\n", NAME, STATUS); return -1;} 22793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 23793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#endif 24793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 25793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerstatic void help() 26793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 27793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("\nThis program shows how to use the conversion for IPP Async.\n" 28793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler"This example uses the Sobel filter.\n" 29793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler"You can use cv::Sobel or hppiSobel.\n" 30793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler"Usage: \n" 31793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler"./ipp_async_sobel [--camera]=<use camera,if this key is present>, \n" 32793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler" [--file_name]=<path to movie or image file>\n" 33793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler" [--accel]=<accelerator type: auto (default), cpu, gpu>\n\n"); 34793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 35793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 36793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerconst char* keys = 37793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 38793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler "{c camera | | use camera or not}" 39793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler "{fn file_name|../data/baboon.jpg | image file }" 40793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler "{a accel |auto | accelerator type: auto (default), cpu, gpu}" 41793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler}; 42793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 43793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler//this is a sample for hppiSobel functions 44793ee12c6df9cad3806238d32528c49a3ff9331dNoah Preslerint main(int argc, const char** argv) 45793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler{ 46793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler help(); 47793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 48793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler VideoCapture cap; 49793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CommandLineParser parser(argc, argv, keys); 50793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler Mat image, gray, result; 51793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 52793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#ifdef HAVE_IPP_A 53793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 54793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler hppiMatrix* src,* dst; 55793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler hppAccel accel = 0; 56793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler hppAccelType accelType; 57793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler hppStatus sts; 58793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler hppiVirtualMatrix * virtMatrix; 59793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 60793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler bool useCamera = parser.has("camera"); 61793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler string file = parser.get<string>("file_name"); 62793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler string sAccel = parser.get<string>("accel"); 63793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 64793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler parser.printMessage(); 65793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 66793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if( useCamera ) 67793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 68793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("used camera\n"); 69793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cap.open(0); 70793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 71793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler else 72793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 73793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("used image %s\n", file.c_str()); 74793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cap.open(file.c_str()); 75793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 76793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 77793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if( !cap.isOpened() ) 78793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 79793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("can not open camera or video file\n"); 80793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return -1; 81793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 82793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 83793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler accelType = sAccel == "cpu" ? HPP_ACCEL_TYPE_CPU: 84793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sAccel == "gpu" ? HPP_ACCEL_TYPE_GPU: 85793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler HPP_ACCEL_TYPE_ANY; 86793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 87793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler //Create accelerator instance 88793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppCreateInstance(accelType, 0, &accel); 89793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_STATUS(sts, "hppCreateInstance"); 90793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 91793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler accelType = hppQueryAccelType(accel); 92793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 93793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sAccel = accelType == HPP_ACCEL_TYPE_CPU ? "cpu": 94793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler accelType == HPP_ACCEL_TYPE_GPU ? "gpu": 95793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler accelType == HPP_ACCEL_TYPE_GPU_VIA_DX9 ? "gpu dx9": "?"; 96793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 97793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("accelType %s\n", sAccel.c_str()); 98793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 99793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler virtMatrix = hppiCreateVirtualMatrices(accel, 1); 100793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 101793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler for(;;) 102793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 103793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cap >> image; 104793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if(image.empty()) 105793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler break; 106793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 107793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler cvtColor( image, gray, COLOR_BGR2GRAY ); 108793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 109793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler result.create( image.rows, image.cols, CV_8U); 110793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 111793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler double execTime = (double)getTickCount(); 112793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 113793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler //convert Mat to hppiMatrix 114793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler src = hpp::getHpp(gray,accel); 115793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler dst = hpp::getHpp(result,accel); 116793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 117793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppiSobel(accel,src, HPP_MASK_SIZE_3X3,HPP_NORM_L1,virtMatrix[0]); 118793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_STATUS(sts,"hppiSobel"); 119793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 120793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppiConvert(accel, virtMatrix[0], 0, HPP_RND_MODE_NEAR, dst, HPP_DATA_TYPE_8U); 121793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_STATUS(sts,"hppiConvert"); 122793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 123793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler // Wait for tasks to complete 124793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppWait(accel, HPP_TIME_OUT_INFINITE); 125793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_STATUS(sts, "hppWait"); 126793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 127793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler execTime = ((double)getTickCount() - execTime)*1000./getTickFrequency(); 128793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 129793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("Time : %0.3fms\n", execTime); 130793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 131793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler imshow("image", image); 132793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler imshow("rez", result); 133793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 134793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler waitKey(15); 135793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 136793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppiFreeMatrix(src); 137793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_DEL_STATUS(sts,"hppiFreeMatrix"); 138793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 139793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppiFreeMatrix(dst); 140793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_DEL_STATUS(sts,"hppiFreeMatrix"); 141793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 142793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 143793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 144793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (!useCamera) 145793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler waitKey(0); 146793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 147793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (virtMatrix) 148793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 149793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppiDeleteVirtualMatrices(accel, virtMatrix); 150793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_DEL_STATUS(sts,"hppiDeleteVirtualMatrices"); 151793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 152793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 153793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler if (accel) 154793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler { 155793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler sts = hppDeleteInstance(accel); 156793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler CHECK_DEL_STATUS(sts, "hppDeleteInstance"); 157793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler } 158793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 159793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("SUCCESS\n"); 160793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 161793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#else 162793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 163793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler printf("IPP Async not supported\n"); 164793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 165793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler#endif 166793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler 167793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler return 0; 168793ee12c6df9cad3806238d32528c49a3ff9331dNoah Presler} 169