Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像

内容索引

    • 项目说明
    • 背景
    • 建立工程
    • 图像处理
      • 干扰性文字移除

项目说明

此项目在GitHub上开源,点击跳转至GitHub。如转载,请标明转载并写入原文链接。

项目中关于python+opencv的知识点主要参考opencv的官网。

作者还拥有个人公众号,会写一些感悟文章,知圈,二维码如下,欢迎扫描关注:
知圈二维码

背景

本设计基于X射线对蛤类水产品进行含砂量自动检测。基于python和opencv库。

建立工程

如下,新建项目。
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第1张图片
为方便版本控制,建立GitHub。PyCharm嵌入了GitHub的模块,可以直接在内部使用。如下图。
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第2张图片
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第3张图片
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第4张图片
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第5张图片

打开该文件所在的文件夹,放入一张图片:
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第6张图片
写入以下测试代码,图片名字为刚才放入的图片。

import numpy as np
import cv2

img = cv2.imread('WeChat Image_20200221164050.jpg', 0)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在此默认opencv已经装好。如果没有安装,上述代码是无法运行的。请先安装。
写的时候发现提示说Interpreter缺失。大概是因为我后来换过一次硬盘,打开提示,找到interpreter并手动添加Python
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第7张图片
运行后弹出来刚才添加的图片,由于是测试的,弹出来是原像素,巨大,仅仅用来验证前期安装成功。

测试通过后将最适合用来研究的素材图片放到文件夹里备用。

图像太过不顺眼,添加窗口调用的命令,使图像与窗口自适应以全部显示,添加后代码如下:

import numpy as np
import cv2

img = cv2.imread('WeChat Image_20200221164050.jpg', 0)
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

运行后图像如下:

图像处理

干扰性文字移除

移除原理:通过threshold函数将高亮的文字识别并将其它区域涂成全黑作为mask,然后将mask通过inpaint函数标识消除文字信息。

ret, mask = cv2.threshold(img, 210, 255, cv2.THRESH_BINARY)
cv2.namedWindow('mask of characters', cv2.WINDOW_NORMAL)
cv2.imshow('mask of characters', mask)

dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)
cv2.namedWindow('Characters removed', cv2.WINDOW_NORMAL)
cv2.imshow('Characters removed', dst)

处理生成的mask图像如下:
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第8张图片
inpaint后图像如下:

添加了cv2.xfeatures2d.SIFT_create()函数来标记沙子,结果弹出了如下错误提示:

    sift = cv2.xfeatures2d.SIFT_create()
AttributeError: module 'cv2' has no attribute 'xfeatures2d'

发现是安装的问题,要安装contrib版本的opencv,关掉Pycharm,打开Anaconda用如下命令安装:

pip install opencv-contrib-python

由于网不稳定,挂载VPN后多次下载失败后终于安装成功。如果由于网络原因始终下载失败,将后面的whl文件名复制去网上下载,下载后本地命令安装。
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第9张图片
安装后重新运行,提示:

    sift = cv2.xfeatures2d.SIFT_create()
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1210: error: (-213:The function/feature is not implemented) This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'

再次发现问题,由于sift不再免费,装上的最新版4.2.0无法使用其库,要重新编译或降级,在此为了快速方便使用,选择降级,再次将contrib降级为3.4.2.17版本。使用如下命令:

pip install opencv-contrib-python==3.4.2.17

几次网络原因中断后终于安装成功:
Python+OpenCV边学边做-机器视觉检测之贝类含砂量X射线影像_第10张图片
使用的sift测试代码如下:

sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(dst,None)
img=cv2.drawKeypoints(dst,kp,img)
cv2.imwrite('sift_keypoints.jpg',img)
cv2.imshow('image', img)
cv2.waitKey(0)

测试结果:

Todo(sift识别沙子)
项目进行中,未完成。

你可能感兴趣的:(工业视觉)