作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我从事的项目需要使用白色仪表板测量水位。目前我的做法是:
但我在分割仪表板时遇到了困难。我避免使用基于颜色的分割,因为我需要它不随光线变化而变化,所以我改为使用形态学操作来检测边缘。我有这张图片:
形态学操作的结果似乎很有希望。白色仪表板上的边缘比其他的更锋利。但我仍然不知道如何正确分割电路板。你能建议一种算法来分割电路板吗?或者请建议您是否有不同的水位测量算法。
这是我的代码:
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
int main()
{
cv::Mat src = cv::imread("image.jpg");
if (!src.data)
return -1;
cv::Mat bw;
cv::cvtColor(src, bw, CV_BGR2GRAY);
cv::medianBlur(bw, bw, 3);
cv::Mat dilated, eroded;
cv::dilate(bw, dilated, cv::Mat());
cv::erode(bw, eroded, cv::Mat());
bw = dilated - eroded;
cv::imshow("src", src);
cv::imshow("bw", bw);
cv::waitKey();
return 0;
}
我正在使用 C++,但我对 Matlab/Mathematica 中的其他实现持开放态度。
最佳答案
如果相机确实是静止的,您可以使用这种快速而肮脏的方法:
im= rgb2gray(imread('img.jpg'));
imr=imrotate(im,1);
a=imr(100:342,150);
plot(a)
图表中显示的最小值是从 10(左)到 1(右)的指标尺度。您可以使用峰值检测器来定位它们的位置并插入它们之间的水位。所以,没有真正需要花哨的图像处理...
关于c++ - 如何检测测量水位的白色仪表板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15432896/
我是一名优秀的程序员,十分优秀!