opencv - 在彩色图像上使用精明
问题描述
我是图像处理和opencv的新手,但最近我正在研究边缘检测的想法,对此我有疑问:
canny 可以直接应用于彩色图像而不将其转换为灰度吗?这会影响结果吗?我试过了(使用 c++ opnencv 函数)没有错误或问题,结果与我将图像更改为灰度后的结果不同。
我读到对于彩色图像,我应该分别在每个通道上应用 canny,然后组合结果.. 好吧,假设每个通道有 3 个结果,我如何将它们组合在一起以获得最终结果?
处理灰度图像是否真的比彩色图像更快,因为在后者我们有 3 个通道(逻辑上看起来是的,但没有参考比较每种方法的优缺点;我所拥有的只是灰度更快,而对于图像分割彩色图像可以提供更多信息)在边缘检测的概念中使用彩色图像是否更好?
解决方案
如果你接受 python,那么你可以这样做:
对于第二个问题:
-
- 使用分离通道
split
的方法分离通道,对每个通道Canny
应用不同的阈值电平,然后使用merge
组合结果的方法。
- 使用分离通道
-
import cv2 img = cv2.imread("grl.jpg") (B, G, R) = cv2.split(img) B_cny = cv2.Canny(B, 50, 200) G_cny = cv2.Canny(G, 50, 200) R_cny = cv2.Canny(R, 50, 200) img_cny = cv2.merge([B_cny, G_cny, R_cny])
结果:
可能的问题:为什么
split
返回B
、G
和R
?答:opencv以
(BGR)
格式读取图像,因此split
返回(B, G, R)
格式您也可以直接应用于图像(感谢@fmw42):
结果:
对于第三个问题:
是的,处理灰度图像比彩色图像快得多。
我们看到不同颜色的图像,但计算机看到的是一个值矩阵:
例如:
-
25 45 67 37 90 .. 56 . 46 . 34 . 13 . . .
矩阵中的每个单元格可以在 0-255 之间变化。灰度图像(矩阵)只有 1 个通道,彩色图像有 3 个通道(矩阵)
因此,您可以认为计算单矩阵(灰色)比计算 3 矩阵(图像)要快
-
推荐阅读
- python - 处理帧时的 Slate 元素引用异常
- z3 - Z3 的 qe 策略返回的公式的正常形式
- swift - 带容器视图的分段控件
- three.js - 通过 GLTFExporter 导出的 Gltf 文件为灰色
- c++ - 为非英语窗口用户获取应用程序数据文件夹路径的可靠方法
- php - WSDL 到数组 php
- android - Windows Xamarin Android 模拟器:询问密码,接受任何随机密码并说正确的密码,但解密不成功
- jquery - 两个不同页面上的两个元素可以在 HTML/CSS 中具有相同的 ID 吗?
- python - fashion_mnist.load_data() 无法强制远程关闭连接
- python - 我应该如何使用我所有的 cpu 功率有效地在 python 中加载文件?