Repository for OpenCV's extra modules
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

51 lines
1.5 KiB

#include "test_precomp.hpp"
#include "opencv2/cann_call.hpp"
namespace opencv_test
{
namespace
{
TEST(ASCENDC_KERNEL, THRESHOLD)
{
cv::cann::setDevice(DEVICE_ID);
Mat cpuRet, npuRet;
AscendMat npuImg, npuTmpMat;
// opencv do not support CV_8S, CV_32S, CV_16F
// ascend do not support CV_16U, CV_64F
uint8_t dtypes[] = {CV_8U, CV_16S, CV_32F};
for (uint i = 0; i <= 4; i++)
{
for (uint j = 0; j < sizeof(dtypes) / sizeof(dtypes[0]); j++)
{
double thresh = 90.5;
double maxVal = 85.2;
Mat img = randomMat(10, 10, CV_MAKETYPE(dtypes[j], 3), 0.0f, 128.0f);
npuImg.upload(img);
npuTmpMat.create(npuImg.rows, npuImg.cols, npuImg.type());
cv::threshold(img, cpuRet, thresh, maxVal, i);
ThresholdOpencvTilingData tiling;
tiling.maxVal = maxVal;
tiling.thresh = thresh;
size_t totalBytes = img.rows * img.cols * img.channels();
// AscendMat memory will be align to 32B, it's safe to set totalLengh a little bigger.
tiling.totalLength = ((totalBytes + 32) & ~31);
tiling.threshType = i;
tiling.dtype = dtypes[j];
kernel_launch(aclrtlaunch_threshold_opencv, AscendStream::Null(), tiling,
npuImg.data.get(), npuTmpMat.data.get());
npuTmpMat.download(npuRet);
EXPECT_MAT_NEAR(cpuRet, npuRet, 10.0f);
}
}
cv::cann::resetDevice();
}
} // namespace
} // namespace opencv_test