gpt4 book ai didi

python - 为什么在更改Sobel运算符的ddepth参数时输出图像有显着差异?

转载 作者:行者123 更新时间:2023-12-02 16:37:27 27 4
gpt4 key购买 nike

我尝试使用OpenCV进行边缘检测,并在应用ddepth运算符时与Sobel参数混淆。当输出图像的ddepth与原始图像(在这种情况下为CV_8U)保持相同时,我得到的输出为

enter image description here

对于原始图像

enter image description here

但是当ddepth参数保留为CV_64F时,输出图像看起来像

enter image description here

您能帮我了解这里发生了什么吗?

import cv2

img = cv2.imread("valve.png", 0)

sobelx3_64 = cv2.Sobel(img, cv2.CV_64F,1,0,ksize=3)

sobelx3_8 = cv2.Sobel(img, -1,1,0,ksize=3)

cv2.imshow("sobelx3_64", sobelx3_64)

cv2.imshow("sobelx3_8", sobelx3_8)

cv2.waitKey(0)

cv2.destroyAllWindows()

最佳答案

造成差异的原因有两个:

  • 首先是显示。对于 float 类型的图像,Opencv的imshow仅考虑(0,1)和对于uint8类型的图像介于(0,255)之间的值。对于浮点图像,任何大于1的值都将被视为1。这就是为什么您看到大部分图像变为白色的原因。您可以通过cv2.imshow("sobelx3_64", sobelx3_64/255)对其进行修复,即在(0,1)内对其进行规范化(但请看第二点,这并不完全正确)。
  • print(sobelx3_8[0:3,0:3]);print(sobelx3_64[0:3,0:3])。这将产生以下结果。现在它们因范围而有所不同,sobel运算符的实际值大于255,但uint8类型不能容纳480,因此opencv会将其饱和到255。对于负值也是如此。

  • 输出。
    [[  0 200 255]
    [ 0 131 255]
    [ 0 0 255]]
    [[ 0. 200. 480.]
    [ 0. 131. 425.]
    [ 0. -4. 316.]]

    关于python - 为什么在更改Sobel运算符的ddepth参数时输出图像有显着差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266105/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com