回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试对数独游戏进行透视变换。预期的转换仅在左侧发生。请帮我指出我的错误</p>
<p>输入图像:</p>
<p><a href="https://i.stack.imgur.com/WZ3wq.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/WZ3wq.jpg" alt="enter image description here"/></a></p>
<p>预期输出图像:</p>
<p><a href="https://i.stack.imgur.com/b2nZ0.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/b2nZ0.jpg" alt="enter image description here"/></a></p>
<p>我得到的输出:</p>
<p><a href="https://i.stack.imgur.com/QikY4.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/QikY4.jpg" alt="enter image description here"/></a></p>
<p>使用<strong>cv2.approxpolydp()</strong>找到的数独谜题的各个角落如下:</p>
<pre><code>top_left = [71,62]
top_right = [59, 418]
bottom_right = [443, 442]
bottom_left = [438, 29]
</code></pre>
<p>输出图像的形状为[300300]</p>
<p>相应的输出坐标为:</p>
<pre><code>output_top_left = [0,0]
output_top_right = [0, 299]
output_bottom_right = [299, 299]
output_bottom_left = [299,0]
</code></pre>
<p>以下是我用于透视变换的代码:</p>
<pre class="lang-py prettyprint-override"><code>#corners = [[71,62], [59, 418], [443, 442], [438, 29]]
new = np.float32([[0,0], [0,299], [299,299], [299,0]])
M = cv2.getPerspectiveTransform(np.float32(corners), new)
dst = cv2.warpPerspective(gray, M, (300,300))
</code></pre>
<p>生成的转换矩阵为:</p>
<pre><code>[[ 9.84584842e-01 3.31882531e-02 -7.19631955e+01]
[ 8.23993265e-02 9.16380389e-01 -6.26659363e+01]
[ 4.58051741e-04 1.45318012e-04 1.00000000e+00]]
</code></pre>