【问题标题】:OpenCV - laplacian different results in Python and C++OpenCV - Python 和 C++ 中的拉普拉斯算子不同的结果
【发布时间】:2017-05-10 21:46:45
【问题描述】:

我正在编写一个 C++ 教程的 Python 版本,并注意到输出图像会有所不同,具体取决于我使用的是 C++ 还是 Python。

例如,和我们的朋友莉娜:

C++ 代码:

#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"

using namespace cv;

int main( int, char** argv )
{
    Mat src, dst, abs_dst;
    int kernel_size = 3;
    int scale = 1;
    int delta = 0;
    int ddepth = CV_16S;

    src = imread( argv[1] );

    Laplacian( src, dst, ddepth, kernel_size, scale, delta, BORDER_DEFAULT );
    convertScaleAbs( dst, abs_dst );

    const char* window_name = "Laplace Demo";
    namedWindow( window_name, WINDOW_AUTOSIZE );
    imshow( window_name, abs_dst );

    waitKey(0);
    return 0;
}

Python 代码:

import sys
import cv2

def main(argv):

    ddepth = cv2.CV_16S
    kernel_size = 3

    src = cv2.imread(sys.argv[1], cv2.IMREAD_COLOR)

    dst = cv2.Laplacian(src, ddepth, kernel_size)
    abs_dst = cv2.convertScaleAbs(dst)

    window_name = "Laplace Demo"
    cv2.namedWindow(window_name, cv2.WINDOW_AUTOSIZE)
    cv2.imshow(window_name, abs_dst)

    cv2.waitKey(0)
    return 0


if __name__ == "__main__":
    main(sys.argv[1:])

C++ 图像输出:

Python图像输出:

你知道为什么会这样吗?

【问题讨论】:

    标签: python c++ opencv


    【解决方案1】:

    回答为时已晚,但如果您在 python 代码中指定参数名称“ksize”,它会起作用:

    dst = cv2.Laplacian(src, ddepth, ksize=kernel_size)
    

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多