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

该示例演示了如何利用OpenCV的cv::checkRange()函数检查图像矩阵中指定区域的像素值是否在特定范围内。通过读取图像,将其转换为灰度,然后检查图像中央ROI的亮度值,判断这些值是否在100.5到212.5之间。如果所有值都在范围内,函数返回true,否则返回false。
摘要由CSDN通过智能技术生成

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值