int MainWindow::generateKernel() { // Fill List with options QStringList items; items << tr("Gauss") << tr("Kirsch (rotating)"); items << tr("Laplacian of the Gaussian (5x5)"); items << tr("Prewitt 1 (rotating)") << tr("Prewitt 2 (rotating)"); items << tr("Sobel (rotating)") << tr("other"); // ask user bool ok; QString item = QInputDialog::getItem(this, tr("QInputDialog::getItem()"), tr("Season:"), items, 0, false, &ok); if (!ok || item.isEmpty()){ return -1; } statusBar()->showMessage("choosen " + item); // interpret data switch(items.indexOf(item)) { case 0: //Gauss return kernelGauss(); break; case 1: //Kirsch return kernelKirsch(); break; case 2: //Laplace return kernelLaplace(); break; case 3: //Prewitt 1 return kernelPrewitt1(); break; case 4: //Prewitt 2 return kernelPrewitt2(); break; case 5: //Sobel return kernelSobel(); break; case 6: //other return kernelOther(); break; default: return -1; } return 0; }
cv::Mat LoGFilter::process(cv::Mat &a_image) { cv::Mat result; // Allocate if necessary result.create(a_image.size(), a_image.type()); // Constroi kernel Gauss; todas entradas = 1/16 cv::Mat kernelGauss(3, 3, CV_32F, cv::Scalar(0.0625)); // Define matriz do filtro de Gauss kernelGauss.at<float>(0, 1) = 0.125; kernelGauss.at<float>(1, 0) = 0.125; kernelGauss.at<float>(1, 1) = 0.25; kernelGauss.at<float>(1, 2) = 0.125; kernelGauss.at<float>(2, 1) = 0.125; // Convolve imagem original com filtro de Gauss cv::filter2D(a_image, result, a_image.depth(), kernelGauss); // Constroi kernel Laplace; todas entradas = 0 cv::Mat kernelLaplace(3, 3, CV_32F, cv::Scalar(0.0)); // Define matriz do filtro de Laplace kernelLaplace.at<float>(0, 1) = -1.0; kernelLaplace.at<float>(1, 0) = -1.0; kernelLaplace.at<float>(1, 1) = +4.0; kernelLaplace.at<float>(1, 2) = -1.0; kernelLaplace.at<float>(2, 1) = -1.0; /* // versao negativa float matrizLaplace [] = { 0f, 1f, 0f, 1f, -4f, 1f, 0f, 1f, 0f }; */ // Convolve imagem Gauss com filtro de Laplace cv::filter2D(result, result, a_image.depth(), kernelLaplace); return result; }