左图为原图,右图为sobel x方向边缘检测后的效果,我很好奇,为什么sobel边缘检测后的图像是彩色的,而且最终要的边缘部分,比如液位部分,为红色,假如背景为蓝色,那么液位部分也是蓝色。这是为什么呢?
官方文档里也找不到相关信息,百度也找不到,若能解决,感激不尽!
百度到的sobel边缘检测的相关信息全是直接使用 sobel函数的,没有人知道sobel检测后的彩色图像生成的边缘图像的颜色是怎么生成的么?
没有看到你的源代码,所以不没法判断你的问题,大体推测是颜色空间的问题,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()
你是不是直接对彩色图像边缘检测的
Sobel算子使用两个(3x3)矩阵来对原图进行卷积运算以计算出两个方向的灰度差分(偏导)的估计值(一个水平方向、一个竖直方向)。我们假定A是原始图像(彩色图像需先转换为灰度图像),Gx和Gy分别是在横向及纵向的灰度偏导的近似值(即两个方向上对原图的平面卷积结果)。