opencv中灰度图绘制轮廓无法显示轮廓颜色的问题 |
您所在的位置:网站首页 › 黑白图绘画 › opencv中灰度图绘制轮廓无法显示轮廓颜色的问题 |
不多废话,我们直入主题 XD 下面是一段代码: import cv2 img=cv2.imread('55.jpg') gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换为灰度图 ret,thresh =cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #二值化灰度图 contours,binary=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #获得轮廓 draw_img=img.copy() res=cv2.drawContours(draw_img,contours,-1,(0,0,255),1) #绘制轮廓 cv2.imshow('res',res)我们将原图拷贝了一份,并将轮廓绘制到副本上,得到了如下图像:
我一直用它做例子来着 可以看到,我在原图的副本上画出了红色的边缘轮廓。 事后我突发奇想,可不可以在二值化(或灰度图)的图像上画出红色的轮廓呢? import cv2 img=cv2.imread('55.jpg') gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换为灰度图 ret,thresh =cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #二值化灰度图 contours,binary=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #获得轮廓 draw_img=img.copy() res=cv2.drawContours(thresh,contours,-1,(0,0,255),1) #绘制轮廓 cv2.imshow('res',res)为了方便展示效果,将线条粗细调整为5 结果却出人意料,图片上的边缘轮廓未能正确的显示颜色! (这背后一定有鬼!) 顺便提一下,灰度图也无法显示颜色,别试了(哭)
什么叫灰度图?任何颜色都有红、绿、蓝三原色组成,而灰度图只有一个通道,他有256个灰度等级,255代表全白,0表示全黑。在Windows操作系统中可以使用画图的颜色编辑功能,将红绿蓝三个通道的数值设定为相同值就可以看到其对应的灰度效果。 注意 “灰度图只有一个通道”我们平常的图像为RGB三通道,而灰度图本身为单通道,自然不会正确的显示边缘轮廓的颜色,所以要将三幅灰度图叠在一起: 举个栗子 draw_img=cv2.merge((thresh.copy(),thresh.copy(),thresh.copy()))完整代码: import cv2 img=cv2.imread('55.jpg') gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转换为灰度图 ret,thresh =cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #二值化灰度图 contours,binary=cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE) #获得轮廓 draw_img=cv2.merge((thresh.copy(),thresh.copy(),thresh.copy())) #叠加 res=cv2.drawContours(draw_img,contours,-1,(255,0,255),1) #绘制轮廓 cv2.imshow('res',res)
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |