Анаморфоз в питоне

$fields = array();
$cats_array = array(1,7,28);
foreach ($cats_array as $category) {
    $category_field_query = "SELECT fields FROM categories WHERE status = 1 AND id= $category";
    $category_field_query_run = mysqli_query($connect, $category_field_query);
    $cat_field = mysqli_fetch_object($category_field_query_run);
    $field = explode(",", $cat_field->fields); // Explode ',' from '/'3'/,'
    $field = str_replace("/", "", $field);
    $fields[] = $field;
}
print_r($fields);
0
задан Nihar 20 January 2019 в 12:23
поделиться

1 ответ

Подобно смещению столбца, вы должны также включить смещение для строк при вычислении b и R. Поскольку деформированное изображение имеет c строк, смещение составляет c//2:

b = math.atan2(j - c//2, i-c)
R = math.sqrt((j - c//2)**2 + math.pow(i-c, 2))

Обратите внимание, что деформированное изображение не является идеальным кругом, так как вы указали, что оно в два раза больше ширины и высоты. Если вы хотите полный круг, вам также следует настроить проверку верхней границы для R, чтобы она была c//2, так как это макс. радиус вдоль строк:

if r <= R <= c//2:
    ...

И аналогично вам нужно настроить вычисления в convert:

return ..., math.trunc(c//2 - R)

Но тогда, в любом случае, вы можете просто использовать квадратное изображение с самого начала, т. е. указать warp.shape == (c, c).

Редактировать

Обновлен код, используются исходные размеры для деформированного изображения:

import math
import cv2
import numpy as np

img = cv2.imread("/tmp/img.jpg")
(rows, cols) = (img.shape[0], img.shape[1])
r = 0
c = rows // 2
warp = np.zeros([rows, cols, 3], dtype=np.uint8)


def convert(R, b):
    return math.trunc(c * (1 - b/math.pi)), 2*math.trunc(c - R) - 1


for i in range(0, cols):
    for j in range(0, rows):
        b = math.atan2(j - c, i - c)
        R = math.sqrt((j - c)**2 + (i - c)**2)
        if r <= R <= c:
            q, p = convert(R, b)
            warp[j, i] = img[p, q]

cv2.imshow("Output", warp)
cv2.waitKey()

И выходное изображение:

Output image [1112 ]

0
ответ дан a_guest 20 January 2019 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: