0

在 OpenCV 2.1 中,我使用 cv::inRange 对 cv::Mat 应用了颜色过滤:

cv::CvScalar* scalar_low = new cv::CvScalar(10,20,30,0);
cv::CvScalar* scalar_up = new cv::CvScalar(20,30,40,0)
cv::Mat* in = new cv::Mat(cv::Size(10,10), CV_8UC3);
cv::Mat* out = new cv::Mat(cv::Size(10,10), CV_8UC1);

cv::inRange(*in, *scalar_low, *scalar_up, *out); // <-----

在 OpenCV 2.3(当前)中,不再支持以 cv::CvScalar 作为参数的 cv::inRange。

void inRange(Mat src, Mat lowerb, Mat upperb, Mat dst);

如何在当前定义的 C++ 中使用此函数?

4

2 回答 2

3

OpenCV 的当前版本是 2.4.1。

请阅读此版本中的文档:http ://docs.opencv.org/modules/core/doc/operations_on_arrays.html?highlight=inrange#inrange

以下是当前格式:

C++: void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst)

如果您想查看它的正确定义,请查看opencv 示例附带的camshiftdemo.cpp的第 122 行。

inRange(hsv, Scalar(0, smin, MIN(_vmin,_vmax)),Scalar(180, 256, MAX(_vmin, _vmax)), mask);

希望你能从中找出正确的定义。

于 2012-06-24T18:43:05.987 回答
0

以下适用于我的 opencv 2.4.1:

cv::inRange(src, cv::Scalar(159, 135, 135), cv::Scalar(179, 255, 255), dstB);
于 2012-08-31T03:05:32.103 回答