我正在用 OpenCV 编写一个用于月球陨石坑检测的 C++ 程序,它似乎只能准确地检测到一小部分陨石坑。我对这种方法的策略是首先将图像转换为 HSV,然后用于inRange()捕捉一系列值中的颜色以产生阈值,然后对其进行高斯模糊并用于HoughCircles()检测圆圈。
我不完全理解的一件事是,当我inRange()在颜色周围设置低阈值和高阈值时,它根本不会返回任何内容。只是一个黑色的图像。它仅在我将低阈值设置为时才有效,Scalar(0,0,0)但我认为这会使其有些不准确。有什么我不明白的吗?我的测试图像如下。
这是我用来测试此图像的代码:
#include <cstdio>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/features2d/features2d.hpp"
using namespace std;
using namespace cv;
int main(int argc, char** argv) {
// using namespace cv;
printf("%s\n", argv[1]);
Mat src=imread(argv[1]);
if (!src.data) {
std::cout << "ERROR:\topening image" <<std::endl;
return -1;
}
// converts the image to hsv so that circle detection is more accurate
Mat hsv_image;
cvtColor(src, hsv_image, COLOR_BGR2HSV);
// high …Run Code Online (Sandbox Code Playgroud)