OpenCV玩九宮格數獨(零)——預告篇
01-27
九宮格
數獨源於18世紀的瑞士,又稱九宮格,有九行、久列和九宮。玩家需要在九宮格中,根據已知的數字,利用邏輯和推理能力,填出所有的空格中應有的數字。填的時候要求每行、每列和每宮都要不重複地包含數字0-9。每行、每列和每宮中1-9都必須出現且只能出現一次,故稱之為數獨。數獨遊戲考察的是解題者的觀察能力和邏輯推理能力,雖然規則很簡單,但是數字的排列方式卻是包含千變萬化,是一種鍛煉思維的絕佳方式。有時候數獨不光有數字的變化,還有顏色的變化,更難但趣味也更多。
在剛剛接觸機器視覺的時候,我就想著用機器視覺來解數獨。當時也做了一些嘗試。但是當時只是做到了提取每一個九宮格和數字,由於當時初學能力有限,就擱置了。最近重新拾起,不是用C++,而是用Python,終於完整地把可以完整地用九宮格了。
今天這篇文章只能說是預告,因為最近空閑時間有限,而這個項目又不是簡簡單單就能說完的,所以我且利用空閑時間慢慢寫,君且慢慢看。
流程
大致的流程是這樣的
- 九宮格數字提取
- 數字識別
- 數據收集和處理
- kNN數字識別
- 數獨生成和求解
效果預覽
1.數字提取
數字提取,就是在一張數獨圖片中提取出已知的數字
2.數字識別
數字識別需要訓練kNN數字識別模型,就需要收集數據,進行數據處理之後訓練模型。最終可以正確地識別九宮格中的數字。由於訓練樣本有限,所以現有模型也許只能完美的識別上圖所示的九宮格。
3.求解數獨並展示結果
公眾號CVPy,分享OpenCV和Python的實戰內容。每一篇都會放出完整的代碼。歡迎關注。n
到個人博客了解更多——冰不語的博客:http://6xiaolong.cn/
推薦閱讀:
※1.28【OpenCV圖像處理】凸包計算
※線性代數的直覺理解(5)
※1.8【OpenCV圖像處理】繪製形狀與文字
※50行代碼實現人臉檢測
※1.9【OpenCV圖像處理】平滑模糊濾波