我有一张嘈杂的图像,其中有几个亮点,我需要识别和分析。我尝试过使用简单的阈值技术,但噪声水平太高,并且很难准确地隔离斑点。
这是我的图像示例,其中包含我想要识别的斑点:
我正在使用带有 C++ 的 OpenCV,并且希望获得有关识别这些点的最佳方法的指导。具体来说,我需要帮助:
这是我迄今为止尝试过的:
#include <opencv2/opencv.hpp>
int main() {
cv::Mat image = cv::imread("image.png", cv::IMREAD_GRAYSCALE);
if (image.empty()) {
return -1;
}
// Thresholding to create a binary image
cv::Mat binaryImage;
cv::threshold(image, binaryImage, 200, 255, cv::THRESH_BINARY);
// Finding contours
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binaryImage, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// Drawing contours
cv::Mat outputImage = cv::Mat::zeros(image.size(), CV_8UC3);
for (size_t i = 0; i < contours.size(); i++) {
cv::drawContours(outputImage, contours, (int)i, cv::Scalar(0, 0, 255), 2);
}
cv::imwrite("output.png", outputImage);
return 0;
}
尝试腐蚀和膨胀,这是 opencv 中提供的两个图像处理函数。侵蚀可以消除小的白色斑点,并且应该能够比阈值处理更好地消除图像中的噪点。您应该在图像中的亮点处留下一些白色像素。然后,扩张会将斑点放大回原来的大小。