c ++中的侵蚀函数没有给出任何输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c ++中的侵蚀函数没有给出任何输出相关的知识,希望对你有一定的参考价值。

我试图在opencv中使用内置侵蚀功能来实现侵蚀图片的功能。

我的方法是检查图像区域中是否有0,如果内核是1,那么我无法设置一个,这意味着条件为假。然后我的第二个if语句意味着条件为真然后我的1被设置。

void erosion(const cv::Mat& image, cv::Mat& erosion_image, const cv::Mat& kernel)
{
    bool check;
    int count;
    int count_2;
    int anchorx = kernel.rows / (2.0);
    int anchory = kernel.cols / (2.0);
    for (int x = 0; x < image.rows; x++) {
        for (int y = 0; y < image.cols; y++) {
            kernel.at<uchar>(x, y);
            for (int count = 0; count < kernel.rows; count++) {
                for (int count_2 = 0; count_2 < kernel.cols; count_2++) {

                    if (image.at<uchar>(x + count, y + count_2) == 0 && kernel.at<uchar>(count, count_2) == 1) {

                        check = false;
                    }
                }
            }

            if (check) {

                erosion_image.at<uchar>(x, y) = 1;
            }
        }
    }
}

这是正确的方法吗?先感谢您

答案

这是二进制图像的侵蚀定义。如果处理灰度图像,则应将像素值设置为其邻域Wiki-Erosion中的点的最小值。

在下面的代码而不是最大像素值1我使用255 - 默认为OpenCV CV_8U图像类型的最大值。

注意,您还需要选择如何处理图像的边框像素。在以下代码中,他们只是没有处理。二进制图像的侵蚀可以表示为:

void erosion(const cv::Mat& image, cv::Mat& erosion_image, const cv::Mat& kernel)
{
    bool check;
    int count;
    int count_2;
    int anchorx = kernel.rows / (2.0);
    int anchory = kernel.cols / (2.0);
    for (int x = anchorx; x < image.rows - anchorx; x++) {
        for (int y = anchory; y < image.cols - anchory; y++) {
            check = true;
            if (image.at<uchar>(x, y))
            {
                for (int count = 0; count < kernel.rows && check; count++) {
                    for (int count_2 = 0; count_2 < kernel.cols && check; count_2++) {

                        if (image.at<uchar>(x - anchorx + count, y - anchory + count_2) == 0 &&
                            kernel.at<uchar>(count, count_2) == 1) {
                            erosion_image.at<uchar>(x, y) = 0;
                            check = false;
                        }
                    }
                }

                if (check) 
                    erosion_image.at<uchar>(x, y) = 255;
            }
            else
                erosion_image.at<uchar>(x, y) = 0;
        }
    }
}

以上是关于c ++中的侵蚀函数没有给出任何输出的主要内容,如果未能解决你的问题,请参考以下文章

中缀到前缀的程序中的c函数中未返回反转字符串

为啥我使用回溯解决数独的 JAVA 代码没有给出任何解决方案? [关闭]

LPC 1768 上的 IAP

使用递归函数解码字谜不会给出预期的输出

python中定义函数的关键字是啥?

函数与函数式编程