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

图片说明

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

4个回答

没有看到你的源代码,所以不没法判断你的问题,大体推测是颜色空间的问题,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() 
SecretGarden
SecretGarden 回复zhuanzhuan1231: 如果直接对彩色图像的RGB分量做Sobel处理,那这个结果就很正常了。液位的部分之所以是红色,是因为它的邻域是灰色,所以红色的梯度值较大。
2 年多之前 回复
zhuanzhuan1231
zhuanzhuan1231 对,我是直接在彩色图象进行的边缘检测,发现比灰度图像效果要好,我只求了x方向的sobel边缘检测,现在还是考虑彩色图像边缘检测后生成图像的颜色的问题
2 年多之前 回复

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

zhuanzhuan1231
zhuanzhuan1231 懂你的意思,但我这个是直接对彩色图像进行边缘检测的
2 年多之前 回复

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

zhuanzhuan1231
zhuanzhuan1231 是的
2 年多之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐