作者 | 俊欣
来源 | 关于数据分析与可视化
Python
实战项目,主要用到的库有pip
命令下载安装pipinstallopencv-pythonnumpypillow
边缘检测的基本思想就是简化图像信息,使用边缘线代表图像所携带信息,而这次我们要用到的则是Canny
边缘检测算子,在Opencv
当中需要调用的是cv.canny()
方法即可,代码如下
importcv2ascv
importmatplotlib.pyplotasplt
img=cv.imread('导入图像的路径',0)
edges=cv.Canny(img,100,200)
plt.subplot(121)
plt.imshow(img,cmap='gray')
.........
plt.show()
output
我们最终要实现的目的在于将照片变成素描风格,大致的逻辑在于首先需要将图片变成灰色图像然后反转,在反转之后进行模糊化处理,代码如下
importcv2
img=cv2.imread("导入照片的路径")
##将照片灰度化处理
gray_image=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
##将灰度化的照片反转处理
inverted_gray_image=255-gray_image
##将反转的照片模糊化处理
blurred_inverted_gray_image=cv2.GaussianBlur(inverted_gray_image,(19,19),0)
##再一次的进行反转
inverted_blurred_image=255-blurred_inverted_gray_image
###颜色减淡混合处理
sketck=cv2.divide(gray_image,inverted_blurred_image,scale=256.0)
cv2.imshow("OriginalImage",img)
cv2.imshow("PencilSketch",sketck)
cv2.waitKey(0)
output
现在我们需要来判断图片当中图形的轮廓,而识别轮廓的算法在opencv
模块当中是有内置的,代码如下
importcv2
importnumpyasnp
frommatplotlibimportpyplotasplt
#导入照片
img=cv2.imread('3.png')
#将照片灰度化处理,当然要是您的照片已经是黑白的,就可以跳过这一步
gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#settingthresholdofthegrayimage
_,threshold=cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
#识别轮廓的方法
contours,_=cv2.findContours(
threshold,cv2.RETR_TREE,cv2.CHAIN_APPRX_SIMPLE)
i=0
forcontourincontours:
#cv2.approxPloyDP()functiontoapproximatetheshape
approx=cv2.approxPolyDP(contour,0.01*cv2.arcLength(contour,True),True)
#找到图片的中心点
M=cv2.moments(contour)
ifM['m00']!=0.0:
x=int(M['m10']/M['m00'])
y=int(M['m01']/M['m00'])
#将轮廓的名字放在各个图形的中央
iflen(approx)==3:
cv2.putText(img,'Triangle',(x,y),
cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,0,0),2)
eliflen(approx)==4:
.......
eliflen(approx)==5:
......
eliflen(approx)==6:
......
else:
......
#将最后的图形呈现出来
cv2.imshow('shapes',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
output
分享
点收藏
点点赞
点在看
文章转发自AI科技大本营微信公众号,版权归其所有。文章内容不代表本站立场和任何投资暗示。
Copyright © 2021.Company 元宇宙YITB.COM All rights reserved.元宇宙YITB.COM