我从事一个需要使用白色仪表板测量水位的项目。目前我的方法是:
- 分割白色仪表板。
- 对着仪表板测量水位。
但我被困在分割仪表板。我避免使用基于颜色的分割,因为我需要它不受光线变化的影响,所以我使用形态学操作来检测边缘。我有这张图片:
形态学运算的结果似乎很有希望。白色量规板上的边缘比其他的更锋利。但我仍然不知道如何正确分割电路板。你能推荐一种算法来分割电路板吗?或者请建议您是否有不同的算法来测量水位。
这是我的代码:
#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 中的其他实现持开放态度。