1 void calcGradientFeat(const Mat& imgSrc, vector<float>& feat) 2 { 3 float sumMatValue(const Mat& image); // 计算图像中像素灰度值总和 4 5 Mat image; 6 cvtColor(imgSrc,image,CV_BGR2GRAY); 7 resize(image,image,Size(8,16)); 8 9 // 计算x方向和y方向上的滤波 10 float mask[3][3] = { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } }; 11 12 Mat y_mask = Mat(3, 3, CV_32F, mask) / 8; 13 Mat x_mask = y_mask.t(); // 转置 14 Mat sobelX, sobelY; 15 16 filter2D(image, sobelX, CV_32F, x_mask); 17 filter2D(image, sobelY, CV_32F, y_mask); 18 19 sobelX = abs(sobelX); 20 sobelY = abs(sobelY); 21 22 float totleValueX = sumMatValue(sobelX); 23 float totleValueY = sumMatValue(sobelY); 24 25 // 将图像划分为4*2共8个格子,计算每个格子里灰度值总和的百分比 26 for (int i = 0; i < image.rows; i = i + 4) 27 { 28 for (int j = 0; j < image.cols; j = j + 4) 29 { 30 Mat subImageX = sobelX(Rect(j, i, 4, 4)); 31 feat.push_back(sumMatValue(subImageX) / totleValueX); 32 Mat subImageY= sobelY(Rect(j, i, 4, 4)); 33 feat.push_back(sumMatValue(subImageY) / totleValueY); 34 } 35 } 36 } 37 float
除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自OpenCV进阶之路:神经网络识别车牌字符