Функция переходит в CVS?

Подобно смещению столбца, вы должны также включить смещение для строк при вычислении 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 ]

5
задан Joey 23 October 2012 в 11:12
поделиться

4 ответа

Если Вы - единственная разработка на ответвлении функции, Вы могли бы просто использовать Мерзавца в качестве своей "системы" разработки песочницы и затем после того как Вам сделали изменения, объединяете их в Ваш репозиторий CVS.

Вы все еще получаете выгоду от управления исходным кодом для Вашего промежуточного продукта работы.

5
ответ дан 13 December 2019 в 22:19
поделиться

Существует превосходное обсуждение переходящих стратегий, названных переданными потоком строками, которые могли бы помочь - оно описывает преимущества и недостатки использования ответвлений функции.

Это также покрывает опции для строки кода owenership и политики, которую Вы хотели бы проводить

3
ответ дан 13 December 2019 в 22:19
поделиться

Одна вещь рассмотреть состоит в том, чтобы на самом деле закрыть ответвление функции, когда Вы сделаны с ним, после того как Вы объединили его назад с основной соединительной линией. В этом контексте близко просто средства отказываются от ответвления, не реального удаления.

После того как работа объединяется, действительно нет никакой потребности в ответвлении для "существования".

Для быстрой идентификации, какие ответвления являются ответвлением функции, я предложил бы иметь утечку соглашения о присвоении имен "FEAT_MY_FEATURE" или "FEAT_20080926" (дата начала?). Это помогло бы игнорировать все те ответвления функции при просмотре структуры репозитория.

1
ответ дан 13 December 2019 в 22:19
поделиться

Я работал в среде в течение нескольких лет, где это было обычной практикой, и это было действительно болезненно. Удостоверьтесь, что слияния являются частью Вашего плана проекта, потому что они собираются использовать много времени и являются источниками задержки.

При документировании ответвлений и присвоении им определенные обязанности помогли немногому.

Мы должны были создать инструмент, чтобы помочь нам объединить изменения инкрементно (одно изменение за один раз, вместо того, чтобы объединить подсказку ответвлений), потому что CVS не ведет себя хорошо, если два ответвления отличаются.

Часто синхронизируйтесь (по крайней мере один раз в неделю).

Я думаю лучший способ приблизиться, это ретроспективно должно было бы удостовериться, что расхождение остается минимальным и разделяющим опасную разработку за различные этапы при помощи Толпы, например.

Я также поощряю Вас читать Шаблоны SCM. Это заказывает, содержит много хороших советов.

1
ответ дан 13 December 2019 в 22:19
поделиться
Другие вопросы по тегам:

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