Поверните математику изображения (C#)

Сначала у меня была та же проблема, но я наконец смог развернуть ее в Heroku.

Вам не нужно делать «простую загрузку ...», только следующее в вашем Procfile:

web: python my_code.py

У вас также должно быть следующее в вашем require.txt;

[ 111]

У меня также был файл runtime.txt, чтобы указать версию Python, например:

python-3.7.2

Но я думаю, что самая важная часть - это та часть, где вы на самом деле получаете доступ к пространству API, как это;

import spacy
import en_core_web_md
nlp = en_core_web_md.load()
10
задан thr 23 January 2009 в 10:11
поделиться

5 ответов

Это зависит, на которой точке Вы хотите использовать в качестве "центра" своего вращения. Давайте назовем точку к и оставленный пуант и тот направо и ниже pointB. Если Вы хотите вращаться вокруг точки так, чтобы точка B выровнялась с нею, вычисление угла вращения в радианах пошло бы как это:

double angle = Math.Atan2(pointB.Y - pointA.Y, pointB.X - pointA.X);

Я не делаю, как Вы обрабатываете свое изображение, таким образом, следующее применяется, только если Вы используете Систему. Рисование. Графика:

myImage.TranslateTransform(-pointA.X, -pointA.Y);
myImage.RotateTransform((float) angle, MatrixOrder.Append);
myImage.TranslateTransform(pointA.X, pointA.Y, MatrixOrder.Append);

Надежда это помогает.

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

Никакой код, извините, но стратегия.

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

Код просто просканировал бы каждую строку изображения результата и отобразил бы пиксель назад на исходное изображение. Можно сделать простое;

for (int plotY = 0; plotY < resultHeight; plotY++)
{
   for (int plotX = 0; plotX < resultWidth; plotX++)
   {
         resultImage.PlotPixel(getOriginalPixel(plotX, plotY, angleOfRotation));
   } 
}

Таким образом, теперь нам просто нужен волшебный "getOriginalPixel" метод, и это - то, где математика входит.

Если мы поворачиваем изображение 0 градусов, то plotX, plotY является просто X/Y исходного изображения. Но это не забава.

pickX = x * cos(angle) - y * sin(angle)
pickY = y * cos(angle) + x * sin(angle)

Я думаю, отобразится на исходный пиксель. Необходимо будет проверить, выходит ли это за пределы, и просто возвратитесь черный или что-то :)

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

Сначала найдите центральную точку:

Point p = new Point((x1-x2)/2, (y1-y2)/2)

Затем используйте trigonomentry для решения для угла. Я собираюсь предположить, что мы повторно основывали источник к нашей центральной точке, таким образом, у меня теперь есть новый x3 и y3 к одной из точек.

hypotenuse = SqrRt(x3^2 + y3^2)

Мы решаем для неизвестного угла TH

Sin(TH) = opposite / hypotenuse

Таким образом для решения для TH нам нужно:

TH = Asin(y3 / hypotenuse)

Вращайтесь TH.

Посмотрите Википедию для ссылки тригонометрических функций

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

Выполнение общего 2D преобразования включает решение пары уравнений с 6 неизвестными.

'x = xA + иттербий + C

'y = xD + Вы + D

Учитывая 3 соответствующих точки, у Вас будет 6 knowns, и система может быть решена. У Вас только есть 4 точки в этом случае, так как Вы не заботитесь о сдвиге, но Вы могли предположить представлять 3-ю точку на уровне 90 градусов к строке, сформированной другими двумя точками. Создание повернутого изображения является затем (псевдо codedily) просто чем-то как:

for ( y = 0; y < height; y++ )
 for ( x = 0; x < width; x++ )
  {
    newx = x*A + y*B + C;
    newy = x*D + y*D + E;
    newimage(x,y ) = oldimage( newx, newy );
  }
}

Если производительность важна, умножение во внутреннем цикле может быть оптимизировано далеко путем отмечания, что y*B только изменяется во внешнем взгляде и что newx, newy изменяются константами A и D во внутреннем цикле.

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

Необходимо искать геометрические матрицы вращения: Обратитесь на этот сайт за подробным объяснением

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

m = rotation matrix

for each point p in destination
  p' = p.m
  get pixel p' from source
  set pixle p in destination

Существует, в методах платформы .NET, чтобы сделать все это: System.Drawing.Graphics.RotateTransform и System.Drawing.Graphics.TranslateTransform. Необходимо будет настроить перевод для перемещения точки вращения изображения к источнику, затем применить вращение и затем другой перевод для возврата его исходному положению. Необходимо будет экспериментировать с этими функциями, чтобы разработать, как они ведут себя - я работаю в данный момент, и не имейте времени для вручения для получения некоторого кода вместе, который работает.:-(

2
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

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