のためのアルゴリズムは、私は私が望んでいた結果(下記のように画像) OpenCVの:簡単な画像の回転、縮小
for (int r = 0;r < image1.rows;r++) {
for (int c = r + 1;c < image1.cols;c++) {
Point center = Point(image1.cols/2, image1.rows/2);
Point center1 = Point(image1.cols/2, image1.rows/2);
double angle = 90.0;
double scale = 1;
double angle1 = 90.0;
double scale1 = 0.5;
rotation = getRotationMatrix2D(center, angle, scale);
rotation1 = getRotationMatrix2D(center1, angle1, scale1);
が、私を得たgetRotationMatrix2D(center, angle, scale);
とwarpAffine(image1, image3, rotation, image3.size());
で画像の回転や削減(JPEG)を試してみました同じ結果を得るためにライブラリ を使用せずに単純な回転と縮小のアルゴリズム(私のような初心者にとっては簡単)を学びたい。 さまざまなソリューションを検索した後、私はこれで終わりました からhttps://gamedev.stackexchange.com/questions/67613/how-can-i-rotate-a-bitmap-without-d3d-or-opengl 誰かが私のペイズーコードに関して私に説明するために単純な線形代数の少しずつ解読できますか?
EDIT:この例では 削減コード
void reduction(Mat image1)
{
for (int r = 0;r < imgC.rows;r++)
{
for (int c = 0;c < imgC.cols;c++)
{
int new_x = c * (125/256);
int new_y = r * (125/256);
imgC.at<uchar>(r, c) = imgC.at<uchar>(new_y, new_x);
}
}
}
ありがとうございました!このコードは90度しかサポートできませんが?私は(180度、270度)のような他の様々な量を入力しようとしたが、それはちょうど私にエラーを与える。 -new_pxの " - "記号とは何ですか? – Lyber
-ve記号はx値が負になることによるもので、通常の座標系では問題ありません。しかし、画像処理では、左上点が(0,0)、下点、右点(w、h)であることを知っています...カスタム角度の場合、角度や画像寸法を計算する必要があるため複雑になります。 45度回転し、同じキャンバスサイズで回転させた画像に収まるようにするには、画像を縮小する必要があります。また、90,270度の画像寸法は交換されます。通常、画像の大きさは同じにして、回転した画像のサイズをキャンバスの下に合わせるように調整します。 –
あなたの答えをありがとう、私は私のリダクションコード(編集されたポスト)を追加しただけで、うまくいきません。 – Lyber