Opencv 如何将掩码传递到cv::convertScaleAbs?
我想节省一些CPU,而不是重复我感兴趣的矩形中的像素。Opencv 如何将掩码传递到cv::convertScaleAbs?,opencv,mask,Opencv,Mask,我想节省一些CPU,而不是重复我感兴趣的矩形中的像素。 如何安全地扩展函数cv::convertScaleAbs以将8位掩码传递给它?您应该首先通过以下方式获取蒙版图像(例如,maskedImage): 然后,只需将此蒙版图像(即,maskedImage)传递给cv::convertScaleAbs()im,因为无法将8位蒙版传递给cv::convertScaleAbs,但始终可以使用Mat::operator()仅处理roi本身: convertScaleAbs(imgfc3(roi), ou
如何安全地扩展函数cv::convertScaleAbs以将8位掩码传递给它?您应该首先通过以下方式获取蒙版图像(例如,
maskedImage
):
然后,只需将此蒙版图像(即,
maskedImage
)传递给cv::convertScaleAbs()
im,因为无法将8位蒙版传递给cv::convertScaleAbs,但始终可以使用Mat::operator()仅处理roi本身:
convertScaleAbs(imgfc3(roi), outputScaled, 255.0);
我很确定它不会迭代你不感兴趣的像素。但它的缺点是需要复制
。。。结果证明是的,您可以将相同的参数传递给convertScaleAbs,并且它可以工作:
Mat r = imgfc3(roi);
convertScaleAbs(r, r, 255.0);
但它仍然可以复制。您正在操作的矩阵的类型是什么?在我的例子中,它是CV32uf。这仍然需要inputImage.rows*inputImage.cols调用std::abs的次数,最小值和最大值。我感兴趣的区域不是矩形,但是一个由两个圆r1>r2组成的环,其面积是可以的,所以正如我所说的,我发现用opencv api不可能做到这一点。为什么不用8位掩码手动编写自己版本的convertScaleAbs呢?这不应该这么棘手。
Mat r = imgfc3(roi);
convertScaleAbs(r, r, 255.0);