1、环境安装
1、官网下载并安装Python(我的是3.11。不用太新版本,往前几个版本就可,太新可能有些不兼容的问题。)
2、下载并安装pycharm——社区版(免费的),当然有能力搞到专业版那更好,没能力建议别去试,太浪费时间。
3、要进行图像处理,还需要安装一些第三方库。
这里提供清华的镜像网址:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxx
xxx为要下载的三方库名字。
具体操作如下:
(1):桌面搜索,输入cmd,进入之后:
(2): 直接复制粘贴下面这些到后面就行:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Scipy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-learn
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple Numpy
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sklearn
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-image
按下回车,等待安装好。
看见successfully installed xxx 即可
(3):新建好项目进入pycharm之后。
点击设置:
点击你创建的项目Project,再点进右侧的“Python Interpreter”一项:
点击框右的“Add Interpreter”
进入“Add Local Interpreter”
进入“Virtualenv Environment ”界面后,点击Existing,在框右的省略号点击后进入如下界面:
开始选择你安装Python的路径,找到python.exe。
之后一路OK即可,等待它自己加载好。
2、开始编程
待处理的图片最好复制到项目里,更方便些。
直接复制图片,然后右键你的项目粘贴“Paste”
后面再点击你粘贴过来的图片,右键点击"Copy path/Reference..."复制路径即可。
直接贴代码:
import cv2
import numpy as np
from skimage import morphology
from skimage import measure
wood=cv2.imread("venv/Wood.png")
wood_gauss=cv2.GaussianBlur(wood,(5,5),0)#高斯滤波
wood_gray=cv2.cvtColor(wood_gauss,cv2.COLOR_BGR2GRAY)#灰度图
thre,wood_bw=cv2.threshold(wood_gray,95,255,cv2.THRESH_BINARY_INV)#二值化
#修改thresh那里的值,在二值化的时候就可以初步调试出不错的效果
#腐蚀
k=np.ones((4,4),np.uint8)#括号里的数列越小,腐蚀越精细,反之越粗糙
dst=cv2.erode(wood_bw,k)
#膨胀。闭运算,数列越大膨胀越粗糙(越大)反之越小
k2=np.ones((28,28),np.uint8)
dst2=cv2.dilate(dst,k2)
dst2=cv2.erode(dst2,k2)
#二次腐蚀。开运算,不断调整数列数值,直到图像完美输出
k3=np.ones((8,8),np.uint8)
dst3 = cv2.erode(dst2,k3)
dst3=cv2.dilate(dst3,k3)
#划区域,计算数量
#下面一句,最开头不必加image这一参数,否则会报错。wood_count和hir两个参数就行了。
wood_count,hir=cv2.findContours(dst3,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)#检测所有轮廓,所有轮廓建立一个等级树结构。
print(len(wood_count))
wood_read=cv2.imread('venv/Wood.png')#在原图上把框画出来
result = cv2.drawContours(wood_read, wood_count, -1 ,(0, 255, 0), 1)
#计算面积
merge_threshold = 3
area_threshold = 50
connected_image = morphology.closing(dst3, morphology.disk(merge_threshold))
labeled_image = measure.label(connected_image, connectivity=2)
region_props = measure.regionprops(labeled_image)
area = {}
circle_label = ord('A')
for region in region_props:
area_value = region.area
if area_value >= area_threshold:
if circle_label <= ord('Z'):
area[chr(circle_label)] = area_value
circle_label += 1
print(area)
cv2.imshow('circle',result)
cv2.waitKey(0)#紧跟在imshow后面
运行结果:
很基础的一次作业,能够让人熟悉一下pycharm的一些操作,找找Python的一些感觉。
主要还是对图片的二值处理那一块需要多调调数值来让图像更“好看一些”,其他的计算面积和数量都很简单。