Eu estava fazendo um projeto divertido: Resolvendo um Sudoku a partir de uma imagem de entrada usando OpenCV (como no Google goggles etc). E completei a tarefa, mas no final encontrei um pequeno problema pelo qual vim aqui.
Fiz a programação usando a API Python do OpenCV 2.3.1.
Abaixo é o que eu fiz:
- Leia a imagem
- Encontre os contornos
- Selecione aquele com área máxima (e também um pouco equivalente ao quadrado) .
Encontre os pontos de canto.
por exemplo, abaixo:
(Observe aqui que a linha verde coincide corretamente com o verdadeiro limite do Sudoku, para que o Sudoku possa ser distorcido corretamente
strong>. Verifique a próxima imagem)transforme a imagem em um quadrado perfeito
por exemplo, imagem:
Executar OCR (para o qual usei o método que tenho fornecido em Reconhecimento de dígito simples ção OCR em OpenCV-Python )
E o método funcionou bem.
Problema:
Confira esta imagem.
Executar o passo 4 nesta imagem dá o resultado abaixo:
A linha vermelha desenhada é o contorno original que é o verdadeiro contorno do limite do sudoku.
A linha verde desenhada é o contorno aproximado que será o contorno da imagem distorcida.
O que é claro, há diferença entre a linha verde e a linha vermelha na borda superior do sudoku. Portanto, ao deformar, não estou obtendo o limite original do Sudoku.
Minha pergunta:
Como posso deformar a imagem no limite correto de o Sudoku, ou seja, a linha vermelha OU como posso remover a diferença entre a linha vermelha e a linha verde? Existe algum método para isso no OpenCV?