在做图片清晰度检测时,对非人为马赛克的图片一直找不到好的检测方法,突然临机一动想到角点检测,运行之后,效果还非常不错,分享这段代码给大家。
int iCheckMosaicImage(Mat& srcFrame)
{
Mat srcFrameGray;
int l_iTotalCorner = 0;
cvtColor(srcFrame, srcFrameGray, CV_BGR2GRAY);
cornerHarris(srcFrameGray, srcFrameGray, 2, 3, 0.04);
threshold(srcFrameGray, srcFrameGray, 0.010, 255, CV_THRESH_BINARY);
//imshow("srcFrameGray", srcFrameGray);
int l_iRow = srcFrameGray.rows;
int l_iCol = srcFrameGray.cols;
for (int i = 0; i < l_iRow; i++)
{
for (int j = 0; j < l_iCol; j++)
{
if (srcFrameGray.at<float>(i, j) == 255)//值255为角点
{
l_iTotalCorner++;
}
}
}
return l_iTotalCorner;
}
效果如下 l_iTotalCorner 值越大,非人为马赛克越严重: