此项目在GitHub上开源,点击跳转至GitHub。如转载,请标明转载并写入原文链接。
项目中关于python+opencv的知识点主要参考opencv的官网。
作者还拥有个人公众号,会写一些感悟文章,知圈,二维码如下,欢迎扫描关注:
本设计基于X射线对蛤类水产品进行含砂量自动检测。基于python和opencv库。
如下,新建项目。
为方便版本控制,建立GitHub。PyCharm嵌入了GitHub的模块,可以直接在内部使用。如下图。
打开该文件所在的文件夹,放入一张图片:
写入以下测试代码,图片名字为刚才放入的图片。
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。
运行后弹出来刚才添加的图片,由于是测试的,弹出来是原像素,巨大,仅仅用来验证前期安装成功。
测试通过后将最适合用来研究的素材图片放到文件夹里备用。
图像太过不顺眼,添加窗口调用的命令,使图像与窗口自适应以全部显示,添加后代码如下:
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图像如下:
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文件名复制去网上下载,下载后本地命令安装。
安装后重新运行,提示:
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
几次网络原因中断后终于安装成功:
使用的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识别沙子)
项目进行中,未完成。