画像スクイーズ効果
1、原則
画像の性質の画像座標圧力効果の非線形変換は、画像がそれによって効果を形成し、内側の押出しプロセスの圧縮変形を押下します。
スクイーズ効果が極座標により達成され、この画像Oの中心間距離(x、y)は、半径Rの中心Oから点は、点を変更することなく、変化方向に非線形方法の半径Rを構成します画像スクイズ。また、圧力中心点をカスタマイズすることができ、半径が同じ方法で計算されます。
画素変換率使用Y = SQRT(X)。
OR2 | | = SQRT(OP)*比像点PとRの中心Oからの画像は、Pは、点座標位置、上直線OPに点R2を押すマッピングされた画像です。
達成するために2、
ボイドピンチ(マット&IMG、マット&DST、INT 度) { 場合(度< 1)度= 1 。 もし(度> 32)度= 32 。 もし(dst.empty()) dst.create(img.rows、img.cols、img.type())。 DST = CV ::スカラー::すべて(0 ); INT CHNS = img.channels()。 int型の高さ= img.rows。 int型の幅= img.cols。 int型 MIDX =幅/ 2 ; int型 midY =高さ/ 2; int型I、J、K。 int型; X、Y、offsetX、offsetY ダブルラジアン、半径。 // 弧和半径 のために(私は= 0 ; I <高さI ++ ) { ため(J = 0 ; J <幅J ++ ) { offsetX - = J ; MIDX offsetY = I - midY。 ラジアン = ATAN2((二重)offsetY、(二重)offsetX)。 // 半径 半径= sqrtf((フロート)(offsetX * offsetX + offsetY *offsetY)); 半径 = sqrtf(半径)* 度。 X =(INT)(半径* COS(ラジアン))+ MIDX。 Y =(INT)(半径* SIN(ラジアン))+ midY。 もし(X < 0)X = 0 。 もし X =幅(X> =幅) - 1 。 もし(Y < 0)Y = 0 。 もし(Y> =高さ)Y =高- 1 。 用(K = 0 ; K <CHNS K ++ ) { dst.at<Vec3b>(i、j)は[K] = img.at <Vec3b> (Y、X)[K]。 } } } } マットsrc_img。 マットdst_img。 int型同専務理事= 15 ; ボイド call_back(INT、ボイド * ) { ピンチ(src_img、dst_img、同専務理事)。 関数imshow(" 图ピンチ" 、dst_img)。 } int型のmain(){ src_img =関数imread(" D:\\ 5.OpenCV \\ LeanOpenCV \\ pic_src \\ pic18.bmp \\ WORK " )。 関数imshow(" 原图" 、src_img)。 (src_img、dst_img、同専務理事)ピンチ。 関数imshow(" 图ピンチ" 、dst_img)。 namedWindow(" 图ピンチ" ); createTrackbar(" 倍率ピンチ"、" 图ピンチ"と、同専務理事、50 、call_back)。 call_back(同専務理事、0 ); waitKey(0 )。 }
3 、試験結果
テスト1 :
テスト2 :効果は、グリッドの異なる倍率でプレス。
第二に、マジックミラー効果
1 、原則
達成するための画像座標の非線形変換、k個でルートを誘電率、SQRT(K)/ K 、 kはある1 総合倍率は1 とき、kは以下である1 、勾配の合計倍率。
達成するために2、
ボイドピンチ(マット&IMG、マット&DST、int型のx、int型 Y、INT 度) { 場合(dst.empty()) dst.create(img.rows、img.cols、img.type())。 DST = CV ::スカラー::すべて(0 ); COUT << " X、Y " << X << " " << Y << ENDL。 INT CHNS = img.channels()。 int型の高さ= img.rows。 int型の幅= img.cols。 MIDX = X。 midY = Y。 INT R = 100 。 int型I、J、K。 int型; X、Y、offsetX、offsetY ダブルラジアン、半径。 // 弧和半径 のために(私は= 0 ; I <高さI ++ ) { ため(J = 0 ; J <幅J ++ ) { offsetX - = J ; MIDX offsetY = I - midY。 ラジアン = ATAN2((二重)offsetY、(二重)offsetX)。 // 半径 半径= sqrtf((フロート)(offsetX * offsetX + offsetY * offsetY))。 もし(半径<= R &&半径> 1 ){ フロート K = sqrtf(半径/ R)*半径/ R * 度。 X =(INT)(COS(ラジアン)* K)+ MIDX。 Y =(INT)(SIN(ラジアン)* K)+ midY。 もし(X < 0)X = 0 。 もし X =幅(X> =幅) - 1 。 もし(Y < 0)Y = 0 。 もし(Y> =高さ)Y =高- 1 。 用(K = 0 ; K <CHNS K ++ ) { dst.at <Vec3b>(i、j)は[K] = img.at <Vec3b> (Y、X)[K]。 } } 他 { ため(k = 0 ; K <CHNSあり、k ++ ) { dst.at <Vec3b>(i、j)は[K] = img.at <Vec3b> (i、j)は[K]。 } } } } COUT << " MIDX、midY " << MIDX <<" " << midY << てendl; }
3、試験結果
試験1:ミラー効果を歪めます
テスト2:大きな要因は、潜望鏡の効果が表示されます。
テスト3:
第三に、画像の歪み
、画像ピクセル座標に変換正弦実行完成した画像の歪みを対応する座標にマッピングされます。次のようにキーコードは次のようになります。
用(INT J = 0 ; J <幅あり、j ++ ) { ダブル TEMP =程度* SIN(1.0 * J /幅* PI * T)。// [-degree、度] TEMP =度+ TEMP。 // [0,2 *度] のための(INT I = INT(TEMP + 0.5); I <高さ+ TEMP - 2 *度; I ++ ) { X =(INT)((I - TEMP)*(高さ)/ (高- 度))。 もし(X> = img.rows) X = img.rows -1 ; もし(X < 0 ) X = 0 。 用(INT C = 0 ; C <CHNS、C ++ ) { dst.at <Vec3b>(i、j)は[C] = img.at <Vec3b> (X、J)[C]。 } } }
テスト1:
テスト2:
4、参照
1、「学習OpenCVの」、清華大学プレス、ゲイリー・ブラッドスキー、エイドリアン・カラー
2、アフィン変換
絞り効果(三〇から六) - 高度なバージョンを達成するために3、PhotoShopのアルゴリズム
https://blog.csdn.net/kezunhai/article/details/41873775
テクノロジーは明記してください、ブログ。