OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
OpenCV Otsu's Thresholding: Calculate single threshold value for multiple Mat objects
我有多个不同长度的一维Mat
对象(线(,它们都从同一图像中提取,需要阈值为二进制。 为了实现更"全局"的阈值,我想同时在所有行上使用 Otsu 的阈值。
我目前的方法是使用vconcat
来获取单个Mat
对象。 由于Mat
的所有行和列都具有相同的长度,我希望非初始化值设置为0,如下所示:
[234, 200, 123, 165, 91, 27, 142, 211,
21, 231, 100, 99, 87, 23, 0, 0,
234, 200, 123, 0, 0, 0, 0, 0,
234, 200, 123, 34,132, 32, 242, 12]
当然,我不希望0
影响侵入值的计算。 关于如何以高效/优雅的方式解决这个问题的任何建议?
对我来说(Windows 10,OpenCV 4.1.1,Visual Studio Community 2017(,以下内容就像一个魅力:
// Set up example matrices.
cv::Mat A = (cv::Mat_<uint8_t>(1, 8) << 234, 200, 123, 165, 91, 27, 142, 211);
cv::Mat B = (cv::Mat_<uint8_t>(1, 6) << 21, 231, 100, 99, 87, 23);
cv::Mat C = (cv::Mat_<uint8_t>(1, 3) << 234, 200, 123);
cv::Mat D = (cv::Mat_<uint8_t>(1, 8) << 234, 200, 123, 34, 132, 32, 242, 12);
// Generate intermediate matrix.
cv::Mat inter;
cv::hconcat(std::vector<cv::Mat>{ A, B, C, D }, inter);
// Calculate Otsu's threshold.
cv::Mat thr;
double otsu = cv::threshold(inter, thr, 0, 255, cv::THRESH_OTSU);
初始化的矩阵A
、B
、...有不同的长度。cv::hconcat
生成的中间矩阵inter
长度为(正确的(25,并且没有额外的0
元素。通过 Otsu 方法otsu
的结果阈值为 142。如果我在初始化中手动添加示例中的其他0
元素,我实际上得到的阈值为 100。
也许,您可以提供您的实际代码来比较不同之处!?也许,hconcat
的行为并不像预期或记录的那样!?
不过,希望这会对您有所帮助!
相关文章:
- 传感器值的阈值
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 错误:断言失败 (src.type() == CV_8UC1) 在阈值中
- 使用阈值进行加速度计振动检测
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 使用贝尔曼福特检测产品超过阈值的周期
- 为什么用于阈值矩阵元素的 Matlab 逻辑索引操作在性能上优于 mex 实现?
- 用于浮点阈值操作的 SIMD
- Java opencv inRange 阈值函数将我的图像分成三个不同的图像
- Unordered_map,检查滑动窗口中的阈值
- 一种无需使用if语句而无需使用阈值的方法
- 尝试在给定阈值下将所有像素更改为黑白
- 使用自动阈值进行分段
- 设置多部分上传阈值
- 在RGB图像上执行阈值操作
- Android -OpenCV模板与阈值匹配
- OPENCV3带有阈值函数的错误
- PPG信号的锤窗口和阈值计算
- 如何在OpenCV中阈值
- 在特征中将低于特定阈值的数字舍入为零