Ik was bezig met een leuk project: een Sudoku oplossen van een invoerafbeelding met OpenCV (zoals in Google-goggles, enz.). En ik heb de taak voltooid, maar uiteindelijk vond ik een klein probleem waarvoor ik hier kwam.
Ik deed het programmeren met behulp van Python API van OpenCV 2.3.1.
Hieronder is wat ik deed:
- Lees de afbeelding
- Zoek de contouren
- Selecteer degene met de maximale oppervlakte (en ook enigszins gelijk aan vierkant) .
Zoek de hoekpunten.
bijvoorbeeld hieronder:
(Merk hier op dat de groene lijn correct samenvalt met de werkelijke grens van de Sudoku, zodat de Sudoku correct kan worden vervormd. Controleer volgende afbeelding)
verdraai de afbeelding naar een perfect vierkant
bijv. afbeelding:
Voer OCR uit (waarvoor ik de methode heb gebruikt die ik heb gegeven in Eenvoudige cijferherkenning ition OCR in OpenCV-Python )
En de methode werkte goed.
Probleem:
Bekijk deze afbeelding.
Het uitvoeren van stap 4 op deze afbeelding geeft het onderstaande resultaat:
De getekende rode lijn is de originele omtreklijn die de ware omtrek van de sudoku-grens is.
De getekende groene lijn is een benaderde omtreklijn die de omtrek van de vervormde afbeelding.
Wat natuurlijk het verschil is tussen de groene lijn en de rode lijn aan de bovenrand van sudoku. Dus tijdens het kromtrekken krijg ik niet de originele grens van de Sudoku.
Mijn vraag:
Hoe kan ik de afbeelding op de juiste grens van de Sudoku, oftewel de rode lijn OF hoe kan ik het verschil tussen de rode lijn en de groene lijn verwijderen? Is hier een methode voor in OpenCV?