怎麼用Python把自帶網格的圖片分割出來?
你先將圖片分為n*m的網格,寬高除以nm分出畫素的不同網格座標,最後讀取即可。
用opencv教程角點檢測稍微改一下+角點聚類處理一下,大概能得到橫線豎線的均值,分割開來就可以
import
cv2
as
cv
import
numpy
as
np
from
sklearn。cluster
import
KMeans
def
goodFeaturesToTrack_Demo
(
val
):
maxCorners
=
max
(
val
,
1
)
# Parameters for Shi-Tomasi algorithm
qualityLevel
=
0。01
minDistance
=
10
blockSize
=
5
gradientSize
=
3
useHarrisDetector
=
False
k
=
0。04
# Apply corner detection
corners
=
cv
。
goodFeaturesToTrack
(
src_gray
,
maxCorners
,
qualityLevel
,
minDistance
,
None
,
\
blockSize
=
blockSize
,
gradientSize
=
gradientSize
,
useHarrisDetector
=
useHarrisDetector
,
k
=
k
)
(
‘** Number of corners detected:’
,
corners
。
shape
[
0
])
# Set the needed parameters to find the refined corners
winSize
=
(
5
,
5
)
zeroZone
=
(
-
1
,
-
1
)
criteria
=
(
cv
。
TERM_CRITERIA_EPS
+
cv
。
TermCriteria_COUNT
,
40
,
0。001
)
# Calculate the refined corner locations
corners
=
cv
。
cornerSubPix
(
src_gray
,
corners
,
winSize
,
zeroZone
,
criteria
)
return
corners
src
=
cv
。
imread
(
‘。/1。jpeg’
)
src_gray
=
src
[:,
:,
0
]
corners
=
goodFeaturesToTrack_Demo
(
30
)
(
corners
。
shape
)
X
=
np
。
zeros
((
corners
。
shape
[
0
],
2
),
dtype
=
np
。
float32
)
X
[:,
0
]
=
corners
[:,
0
,
0
]
kmeans
=
KMeans
(
n_clusters
=
5
,
random_state
=
0
)
。
fit
(
X
)
for
i
in
range
(
corners
。
shape
[
0
]):
if
kmeans
。
labels_
[
i
]
==
0
:
cv
。
circle
(
src
,
(
int
(
corners
[
i
,
0
,
0
]),
int
(
corners
[
i
,
0
,
1
])),
4
,
(
255
,
0
,
0
),
cv
。
FILLED
)
if
kmeans
。
labels_
[
i
]
==
1
:
cv
。
circle
(
src
,
(
int
(
corners
[
i
,
0
,
0
]),
int
(
corners
[
i
,
0
,
1
])),
4
,
(
0
,
255
,
0
),
cv
。
FILLED
)
if
kmeans
。
labels_
[
i
]
==
2
:
cv
。
circle
(
src
,
(
int
(
corners
[
i
,
0
,
0
]),
int
(
corners
[
i
,
0
,
1
])),
4
,
(
0
,
0
,
255
),
cv
。
FILLED
)
if
kmeans
。
labels_
[
i
]
==
3
:
cv
。
circle
(
src
,
(
int
(
corners
[
i
,
0
,
0
]),
int
(
corners
[
i
,
0
,
1
])),
4
,
(
255
,
255
,
0
),
cv
。
FILLED
)
if
kmeans
。
labels_
[
i
]
==
4
:
cv
。
circle
(
src
,
(
int
(
corners
[
i
,
0
,
0
]),
int
(
corners
[
i
,
0
,
1
])),
4
,
(
0
,
255
,
255
),
cv
。
FILLED
)
cv
。
imwrite
(
‘Image。jpg’
,
src
)
5個子類,再次做聚類排除掉一些偏差大的點就差不多了