cv2 - cv2 Sobel 显示的图像与示例不同
问题描述
我正在尝试使用 cv2 文档 https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_gradients/py_gradients.html来理解 Sobel 运算符
为了简单起见,我将示例缩减为要点,这就是。
img = cv2.imread("dave.jpg", cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
问题在于给定的原始图像(dave.jpg),我的输出是
与示例相去甚远。这里会发生什么?
如果我复制粘贴示例,并使用 matplotlib 显示图像,则结果与文档中给出的结果更接近。
编辑 - imwrite 显示不同的输出(与预期输出匹配)。
解决方案
这是著名的主题——OpenCV 上的混合数据类型。
如果您查看 OpenCV 教程中的 SobelDemo,您可以找到其他功能:
//![convert]
// converting back to CV_8U
convertScaleAbs(grad_x, abs_grad_x);
convertScaleAbs(grad_y, abs_grad_y);
//![convert]
https://github.com/opencv/opencv/blob/master/samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp#L57
如果您想使用 cv2.imshow,您可以尝试将您的图像转换为 CV_8U 类型(多种方法),如果适合您的任务,可以立即使用 CV_8U:
img = cv2.imread("dave.jpg", cv2.IMREAD_GRAYSCALE)
sobelx = cv2.Sobel(img, cv2.CV_8U, 1, 0, ksize=5)
PS pyplot 支持 CV_64F 类型并正确成像
推荐阅读
- django - 我尝试创建第二个模型,但是当我尝试将其放入我的 html 页面时,什么也没有出现
- javascript - PHP Ajax 请求,处理复选框值
- python - PyQt 运行屏幕 2 次(stackedWidget)
- sql - 从每个组中查找特定行之后的所有记录
- javascript - 未返回复选框的值
- javascript - 是什么导致此 Vue 3 应用程序中 prop 错误的类型检查失败?
- python - 满足 if 语句后如何使 tkinter 消息框弹出?我如何让程序不断检查是否有人赢了。?
- nginx - NGINX 反向代理注入 CORS 标头
- windows - 如何打印竖线或竖线字符?
- python - Keras 没有验证数据集