1,opencv dots_image_kernel

// halcon dots_image kernel估算(d=5)cv::Mat getDotKernel(int d = 5){// 保证d为正的奇数d |= 0x01;cv::Mat kernel = cv::Mat::zeros(d + 2, d + 2, CV_8UC1);int cx = kernel.cols / 2;int cy = kernel.rows / 2;int cnt255 = 0, cnt128 = 0, cnt0 = 0;for (int row = 0; row < kernel.rows; ++row) {for (int col = 0; col < kernel.cols; ++col){float dis = std::sqrt(std::pow(col - cx, 2) + std::pow(row - cy, 2));if (dis < d / 2.0){kernel.at(row, col) = 255;cnt255++;}else if (dis < d / 2.0 + 1.0){kernel.at(row, col) = 128;cnt128++;}else {kernel.at(row, col) = 0;cnt0++;}}}//cv::imwrite("kernel8u.0.png", kernel);//for (int row = 0; row < kernel.rows; ++row) {for (int col = 0; col < kernel.cols; ++col){switch (kernel.at(row, col)){case 255:kernel.at(row, col) = cnt128;break;case 128:kernel.at(row, col) = -cnt255;default:break;}}}cv::imwrite("kernel8u.1.png", kernel);//if (cnt255 *cnt128){kernel.convertTo(kernel, CV_32F, 1.0 / (cnt255*cnt128));}return kernel;}

2,单元测试

3,结果