質問: 長方形の画像を台形にする関数 前回と似たアニメーションを製作中なのですが、今度は壁に画像を貼り付けたいと考えています。壁に貼り付けたとき画像が斜め前方にあるとすると自分からは台形に見えると思います。なので長方形の画像を台形にする関数の使い方を教えていただきたいです。 またその際に前回同様赤い台形の部分を探して画像を貼り付けようと考えているのでその方法も教えていただきたいです。
回答: 本質問に対して本回答に至ったのは、@akasaさんの他の質問にも関連した経緯があります。 画像内の色を検索する方法 - matlab answers - matlab central (mathworks.com) 正方形から台形への射影変換 - matlab answers - matlab central (mathworks.com) 画像貼付に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が入ってないので、両方とも動かす事ができませんでした) how do i take a screenshot using matlab? - matlab answers - matlab central (mathworks.com)