Mat QRRecognition::differential_excitation(Mat inputImg)
{
//生成kernel_size * kernel_size大小卷积核kernel
//Mat kernel = (Mat_<float>(kernel_size, kernel_size));
/*for (int i = 0; i < kernel_size; i++)
{
for (int j = 0;j < kernel_size;j++)
{
if ((i == (kernel_size / 2)) && (j == (kernel_size / 2)))
{
kernel.ptr<float>[i, j] = -8;
}
else
{
kernel.ptr<float>[i, j] = 1;
}
}
}*/
Mat kernel = (Mat_<char>(3, 3) << -1, -1, -1, -1, 8, -1, -1, -1, -1);
Mat dstImage(inputImg.rows, inputImg.cols, CV_8UC1);
Mat temImg(inputImg.rows, inputImg.cols, CV_8UC1);
filter2D(inputImg, dstImage, inputImg.depth(), kernel);
cout << inputImg.rows << "...." << inputImg.cols << endl;
cout << dstImage.rows << "...." << dstImage.cols << endl;
for (int i = 0;i < inputImg.rows;i++)
{
for (int j = 0;j < inputImg.cols;j++)
{
//cout << "..." << inputImg.at<uchar>(i, j) << endl;
if (inputImg.ptr<float>(i, j)[0] == 0)
{
temImg.ptr<float>(i, j)[0] = 0;
}
else
temImg.ptr<float>(i, j)[0] = (dstImage.ptr<float>(i, j)[0] / inputImg.ptr<float>(i, j)[0]);// +inputImg.ptr<float>(i, j)[0];
}
}
return dstImage;
}
Sobel算子
Mat barCode::getSobel(Mat image, bool show) {
Mat cimageX16s, cimageY16s, imageSobelX, imageSobelY, out;
Sobel(image, cimageX16s, CV_16S, 1, 0, 3, 1, 0, 4);
Sobel(image, cimageY16s, CV_16S, 0, 1, 3, 1, 0, 4);
convertScaleAbs(cimageX16s, imageSobelX, 1, 0);
convertScaleAbs(cimageY16s, imageSobelY, 1, 0);
out =