8_OpenCV判断矩阵内的元素是否在某一范围内cv::checkRange()

导读:本篇文章讲解 8_OpenCV判断矩阵内的元素是否在某一范围内cv::checkRange(),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

函数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;
	}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/46184.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!