简单的有无判断算法
对于一些目标,若背景图案单一,可通过锐度值的大小进行有无判断。其中,锐度可理解为图像中线条的数量多少,图案越复杂,图像越清晰,锐度值越高。
算法
int Rgb1ToGray(const cv::Mat& imgSrc, cv::Mat* imgDst)
{
if(3 == imgSrc.channels())
{
cv::cvtColor(imgSrc, *imgDst, COLOR_BGR2GRAY);
}
else if(1 == imgSrc.channels())
{
*imgDst = imgSrc.clone();
}
else
{
return -1;
}
return 0;
}
double GetSharpness(cv::Mat imgSrc)
{
double sharpness = -1.0;
Mat imgGray;
if (0 == Rgb1ToGray(imgSrc, &imgGray))
{
Mat imgSobel;
cv::Sobel(imgGray, imgSobel, CV_16U, 1, 1);
sharpness = mean(imgSobel)[0] * 100;
}
//The average gray level of the edge detection image is used as the sharpness
return sharpness;
}
//有无板判断算法//根据锐度值进行判断//
bool PcbJudge(Mat imgSrc, int value)
{
return (GetSharpness(imgSrc) > value);
}
调用
Mat imageNo = imread("no.png");
Mat imagePcb = imread("pcb.png");
bool res = PcbJudge(imageNo, 100);
cout << "No value: " << res << endl;
res = PcbJudge(imagePcb, 100);
cout << "Pcb value: " << res << endl;