好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

3段Python图像处理的实用代码的分享

前言

今天给大家分析3个计算机视觉方向的 Python 实用代码, 主要用到的库有:

opencv-python numpy pillow

要是大家所配置的环境当中没有这几个模块的话,可先用 pip 命令下载安装:

pip?install?opencv-python?numpy?pillow

边缘检测

边缘检测的基本思想就是简化图像信息,使用边缘线代表图像所携带信息,而这次我们要用到的则是 Canny 边缘检测算子,在 Opencv 当中需要调用的是 cv.canny() 方法即可, 代码如下:

import?cv2?as?cv
import?matplotlib.pyplot?as?plt

img?=?cv.imread('导入图像的路径',0)
edges?=?cv.Canny(img,100,200)
plt.subplot(121)
plt.imshow(img,?cmap='gray')
.........
plt.show()

output:

将照片变成素描风格

我们最终要实现的目的在于将照片变成素描风格,大致的逻辑在于首先需要将图片变成灰色图像然后反转,在反转之后进行模糊化处理, 代码如下:

import?cv2
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("Original?Image",img)
cv2.imshow("Pencil?Sketch",?sketck)
cv2.waitKey(0)

output:

判断形状

现在我们需要来判断图片当中图形的轮廓,而识别轮廓的算法在 opencv 模块当中是有内置的,代码如下:

import?cv2
import?numpy?as?np
from?matplotlib?import?pyplot?as?plt

#?导入照片
img?=?cv2.imread('3.png')
#?将照片灰度化处理,当然要是您的照片已经是黑白的,就可以跳过这一步
gray?=?cv2.cvtColor(img,?cv2.COLOR_BGR2GRAY)
#?setting?threshold?of?the?gray?image
_,?threshold?=?cv2.threshold(gray,?127,?255,?cv2.THRESH_BINARY)

#?识别轮廓的方法
contours,?_?=?cv2.findContours(
????threshold,?cv2.RETR_TREE,?cv2.CHAIN_APPROX_SIMPLE)

i?=?0
for?contour?in?contours:
????#?cv2.approxPloyDP()?function?to?approximate?the?shape
????approx?=?cv2.approxPolyDP(contour,?0.01?*?cv2.arcLength(contour,?True),?True)
????#?找到图片的中心点
????M?=?cv2.moments(contour)
????if?M['m00']?!=?0.0:
????????x?=?int(M['m10']?/?M['m00'])
????????y?=?int(M['m01']?/?M['m00'])
????#?将轮廓的名字放在各个图形的中央
????if?len(approx)?==?3:
????????cv2.putText(img,?'Triangle',?(x,?y),
????????????????????cv2.FONT_HERSHEY_SIMPLEX,?0.6,?(0,?0,?0),?2)
????elif?len(approx)?==?4:
????????.......
????elif?len(approx)?==?5:
????????......
????elif?len(approx)?==?6:
????????......
????else:
????????......

#?将最后的图形呈现出来
cv2.imshow('shapes',?img)
cv2.waitKey(0)
cv2.destroyAllWindows()

output:

是不是简单又实用?

到此这篇关于3段Python图像处理的实用代码的分享的文章就介绍到这了,更多相关Python图像处理内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

查看更多关于3段Python图像处理的实用代码的分享的详细内容...

  阅读:52次