Yog_Los 2022-12-25 16:32 采纳率: 0%
浏览 10

OPENCV中sobel算子x和y方向上梯度的合成问题

import cv2
import numpy as np  
img = cv2.imread("lena.jpg", 0)
x = cv2.Sobel(img,cv2.CV_16S,1,0)
y = cv2.Sobel(img,cv2.CV_16S,0,1)
absX = cv2.convertScaleAbs(x)   
absY = cv2.convertScaleAbs(y)
resule = cv2.addWeighted(absX,0.5,absY,0.5,0)  # result = 0.5x + 0.5y

请问为什么不是用均方根呢?

result_new = np.sqrt(x * x + y * y)
result_new = np.rint(result_new).astype(np.uint8)
cv2.imshow("new",result_new)  # 出来结果不一致,好像是错误的
  • 写回答

3条回答 默认 最新

  • ShowMeAI 2022-12-25 16:39
    关注

    Sobel算子可以用来计算图像的梯度信息,其中梯度指的是图像中像素灰度值的变化率。在x和y方向上计算梯度可以分别得到两张图像,分别表示x和y方向上的梯度信息。如果要将这两张图像合成,可以使用cv2.addWeighted函数。

    • 在上面的代码中,result = cv2.addWeighted(absX,0.5,absY,0.5,0)表示将absX和absY两张图像按权重0.5进行加权平均得到一张图像,即result = 0.5 * absX + 0.5 * absY。
    • 如果要使用均方根的方式将x和y方向的梯度合成,可以使用result_new = np.sqrt(x * x + y * y)。这里先将x和y分别平方,然后将两张图像的平方和开方,得到一张图像。
    • 在使用均方根合成时,可能会出现结果不一致的情况。这是因为使用均方根合成梯度信息会比使用加权平均的方式更加复杂,其结果也更加不确定。在实际使用中,应该根据实际情况选择合适的方法。
    评论

报告相同问题?

问题事件

  • 创建了问题 12月25日

悬赏问题

  • ¥15 office打开卡退(新电脑重装office系统后)
  • ¥300 FLUENT 火箭发动机燃烧EDC仿真
  • ¥15 【Hadoop 问题】Hadoop编译所遇问题hadoop-common: make failed with error code 2
  • ¥15 vb6.0+webbrowser无法加载某个网页求解
  • ¥15 RPA财务机器人采购付款流程
  • ¥15 计算机图形多边形及三次样条曲线绘制
  • ¥15 根据protues画的图用keil写程序
  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件