函数cv::CheckRange()检查输入的矩阵的每一个元素,并确定该元素是否在给定范围内。范围由参数minVal和maxVal设置。但是人恶化NaN或inf值也会被认为超出范围。
如果找到超出范围的值,如果quiet设置为false,会抛出异常。
如果所有值都在范围内,cv::cehckRange()的返回值为true;如果有任何值超出范围,cv::checkRange()的返回值为false。如果指针pos不为NULL,则第一个异常值的位置存储在pos中。
函数原型:
bool cv::checkRange(
cv::InputArray src,
bool quiet = true,
cv::Point* pos = 0, // if non-NULL,location of first outlier
double minVal = -DBL_MAX, // lower check bound
double maxVal = DBL_MAX // upper check bound
);
使用示例:
// 读取一张图片,看中间位置的亮度是否在某一范围内
std::string strFilename = "Test.bmp";
cv::Mat img = cv::imread(strFilename);
if (img.empty()) {
std::cout << "ERROR: Open raw FAIL!" << std::endl;
return;
}
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
cv::namedWindow(strFilename, cv::WINDOW_NORMAL);
cv::imshow(strFilename, img);
cv::waitKey(0);
cv::imshow(strFilename, gray);
cv::waitKey(0);
cv::destroyWindow(strFilename);
int nWidth = img.cols;
int nHeight = img.rows;
int nROIW = nWidth / 20 * 2;
int nROIH = nHeight / 20 * 2;
int nROIX = (nWidth - nROIW) / 4 * 2;
int nROIY = (nHeight - nROIH) / 4 * 2;
cv::Mat imgROI(img, cv::Rect(nROIX, nROIY, nROIW, nROIH));
double dMinVal = 100.5;
double dMaxVal = 212.5;
cv::Point pt;
bool bInRange = cv::checkRange(imgROI, true, &pt, dMinVal, dMaxVal);
if (bInRange) {
std::cout << "In range" << std::endl;
}
else {
std::cout << "Out range" << std::endl;
}
|