長方形の画像を台形にする関数
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
akasa
el 3 de Jul. de 2021
Comentada: akasa
el 9 de Jul. de 2021
前回と似たアニメーションを製作中なのですが、今度は壁に画像を貼り付けたいと考えています。壁に貼り付けたとき画像が斜め前方にあるとすると自分からは台形に見えると思います。なので長方形の画像を台形にする関数の使い方を教えていただきたいです。
またその際に前回同様赤い台形の部分を探して画像を貼り付けようと考えているのでその方法も教えていただきたいです。
0 comentarios
Respuesta aceptada
Atsushi Ueno
el 8 de Jul. de 2021
Editada: Atsushi Ueno
el 8 de Jul. de 2021
画像貼付にimfuse関数を使い(使い方が良く判ってないので)画像が変ですが目的まで到達しました。また後で直します。
%% 壁と赤い領域のある画像の読み込み
Rode = imread('blob.jpg');
[RY,RX,~] = size(Rode);
%% 赤い台形領域の検出 (画像内の色を検索する方法+@)
red = 80; green = 30; blue = 30;
[y,x] = ind2sub(size(Rode), find(Rode(:,:,1) >= red & Rode(:,:,2) <= green & Rode(:,:,3) <= blue));
LtX = min(x); RtX = max(x); UpY = min(y); DnY = max(y); % 台形の左上と右下の座標を得る(簡易版)
y = find(Rode(:,RtX,1) >= red & Rode(:,RtX,2) <= green & Rode(:,RtX,3) <= blue);
RtUpY = min(y); RtDnY = max(y); % 台形の右上と左下の座標を得る(簡易インチキ版)
%% 射影変換 (正方形から台形への射影変換)
img = imread('Matlab_Logo.png');
[SY,SX,~] = size(img);
movingPoints = [1 1; SX 1; 1 SY; SX SY];
fixedPoints = [LtX UpY; RtX RtUpY; LtX RtDnY; RtX DnY];
tform = fitgeotrans(movingPoints, fixedPoints, 'Projective');
RA = imref2d([RX RY], [1 RY], [1 RX]);
[out,r] = imwarp(img, tform, 'OutputView', RA);
C = imfuse(Rode,out,'blend','Scaling','joint');
imshow(C);
今は壁と赤い領域のある画像を直接読み込んでいますが、OpenGLで表示した画面のスクリーンショットを撮れば、ARのような扱いも可能になり、処理を繰り返せばアニメーション表示にも対応出来るはずです。(下記MATLAB Onlineではスクショが撮れず、デスクトップのMATLABにはImage Processing Toolboxが入ってないので、両方とも動かす事ができませんでした)
3 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre インストールとライセンスの紹介 en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!