Вы должны изменить тип изображения "laplaceImage", прежде чем войти в цикл, и, как прокомментировал @Cris Luengo, нет необходимости делить на 9:
cv::Mat ImageManipulation::mylaplace_filter(cv::Mat image)
{
int laplace_mask[9] = { 0, -1, 0, -1, 4, -1, 0, -1, 0 };
int tmp = 0;
int counter = 0;
cv::Mat laplaceImage = cv::Mat::ones(image.rows - 2, image.cols - 2, CV_32F);
for (int i = 1; i < image.rows - 1; i++)
{
for (int j = 1; j < image.cols - 1; j++)
{
for (int k = i - 1; k < i + 2; k++)
{
for (int l = j - 1; l < j + 2; l++)
{
tmp += laplace_mask[counter] * static_cast<int>(image.at<uchar>(k, l));
counter++;
}
}
std::cout << tmp << std::endl;
laplaceImage.at<float>(i - 1, j - 1) = tmp;
tmp = 0;
counter = 0;
}
}
return laplaceImage;
}
после этого, если вы хотите показать «laplaceImage» или сохранить его на жестком диске, вы можете настроить его в диапазоне от 0 до 255, а затем преобразовать его в CV_8U.