# -*- coding:utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow('img', 0)
def traversePixelByCycloidLine(image):
"""
從一副灰度圖像的中心開(kāi)始向邊緣按回形線的方式遍歷所有像素,每個(gè)像素只能訪問(wèn)一次。
我目前實(shí)現(xiàn)了基本的算法, 但存在以下問(wèn)題:
1) 只支持方陣, 且行列為奇數(shù)
2) 只實(shí)現(xiàn), 代碼沒(méi)整理
"""
h, w = image.shape[:2]
assert h == w and h % 2 == 1, '只支持方陣, 且行列為奇數(shù)'
center_x, center_y = [w // 2, h // 2]
traverse_num = h * w
cycloid_num = 0
value = 1
while True:
for i in range(cycloid_num * 2 + 1):
if value >= traverse_num:
return image
center_x = center_x + 1
image[center_y, center_x] = 255
value += 1
cv2.imshow('img', image)
cv2.waitKey(33)
for i in range(cycloid_num * 2 + 1):
if value >= traverse_num:
return image
center_y = center_y + 1
image[center_y, center_x] = 255
value += 1
cv2.imshow('img', image)
cv2.waitKey(33)
for i in range(cycloid_num * 2 + 2):
if value >= traverse_num:
return image
center_x = center_x - 1
image[center_y, center_x] = 255
value += 1
cv2.imshow('img', image)
cv2.waitKey(33)
for i in range(cycloid_num * 2 + 2):
if value >= traverse_num:
return image
center_y = center_y - 1
image[center_y, center_x] = 255
value += 1
cv2.imshow('img', image)
cv2.waitKey(33)
cycloid_num += 1
image_wh = 11
while True:
image = np.zeros((image_wh, image_wh, 3), dtype=np.uint8)
traversePixelByCycloidLine(image)