Python+OpenCV邊學邊做-機器視覺檢測之貝類含砂量X射線影像

項目說明

此項目在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識別沙子)
項目進行中,未完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章