zhuanzhuan1231
zhuanzhuan1231
采纳率0%
2018-04-17 12:35 阅读 2.7k

openCV sobel边缘检测的图像彩色问题!求大神,感激不尽!!

10

图片说明

左图为原图,右图为sobel x方向边缘检测后的效果,我很好奇,为什么sobel边缘检测后的图像是彩色的,而且最终要的边缘部分,比如液位部分,为红色,假如背景为蓝色,那么液位部分也是蓝色。这是为什么呢?
官方文档里也找不到相关信息,百度也找不到,若能解决,感激不尽!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • zhuanzhuan1231 zhuanzhuan1231 2018-04-17 12:33

    百度到的sobel边缘检测的相关信息全是直接使用 sobel函数的,没有人知道sobel检测后的彩色图像生成的边缘图像的颜色是怎么生成的么?

    点赞 评论 复制链接分享
  • yangwenjie16 清风亦枫 2018-04-17 13:08

    Sobel算子使用两个(3x3)矩阵来对原图进行卷积运算以计算出两个方向的灰度差分(偏导)的估计值(一个水平方向、一个竖直方向)。我们假定A是原始图像(彩色图像需先转换为灰度图像),Gx和Gy分别是在横向及纵向的灰度偏导的近似值(即两个方向上对原图的平面卷积结果)。

    点赞 评论 复制链接分享
  • SecretGarden SecretGarden 2018-04-17 14:28

    没有看到你的源代码,所以不没法判断你的问题,大体推测是颜色空间的问题,Sobel算子一般在灰度分量上操作。参考代码如下:

    import cv2
    import numpy as np
    
    color_image = cv2.imread('1.bmp')
    color_image = cv2.GaussianBlur(color_image, (3,3), 0)
    gray_image = cv2.cvtColor(color_image, cv2.COLOR_BGR2GRAY)
    
    grad_x = cv2.Sobel(gray_image, cv2.CV_16S, 1, 0)
    grad_y = cv2.Sobel(gray_image, cv2.CV_16S, 0, 1)
    
    abs_grad_x = cv2.convertScaleAbs(grad_x)
    abs_grad_y = cv2.convertScaleAbs(grad_y)
    
    target_image = cv2.addWeighted(abs_grad_x, 0.5,abs_grad_y, 0.5, 0)
    
    cv2.imshow('target_image', target_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows() 
    
    点赞 评论 复制链接分享
  • qq_27624429 qq_27624429 2018-04-18 02:17

    你是不是直接对彩色图像边缘检测的

    点赞 评论 复制链接分享

相关推荐