溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C++怎么實(shí)現(xiàn)圖像的平移

發(fā)布時(shí)間:2022-01-04 10:03:27 來(lái)源:億速云 閱讀:445 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“C++怎么實(shí)現(xiàn)圖像的平移”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C++怎么實(shí)現(xiàn)圖像的平移”吧!

圖像的平移

移動(dòng)是將圖像看作一個(gè)整體,顯示時(shí)不能像掃描那樣,掃描方式有些像打開(kāi)一副畫(huà),例如顯示上部分的時(shí)候,下部分可以不現(xiàn)實(shí),而移動(dòng)則可以看成一塊木板畫(huà),顯示時(shí)必須按物理順序進(jìn)行,例如從上向下平移時(shí),必須先顯示下面的圖像,后顯示上面的圖像,因此平移的算法比掃描難一些。

平移是一復(fù)制的方法顯示圖像的,每顯示一次,復(fù)制的行數(shù)就增加一行,直至顯示完成。

//移動(dòng)顯示void Mobile_display(){  //讀取圖片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = Mat(srcImage.size(), CV_8UC3);  imshow("原圖", srcImage);  //定義變量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  namedWindow("移動(dòng)顯示");  for (int i = 1; i < ImageWidth; i++) {//步長(zhǎng)為1    roiImage = srcImage(Rect(ImageWidth-i, 0, i, ImageHeigth));    roiImage.copyTo(dstImage(Rect(0, 0, i, ImageHeigth)));    imshow("移動(dòng)顯示", dstImage);    waitKey(5);  }  waitKey(0);}

動(dòng)圖

C++怎么實(shí)現(xiàn)圖像的平移

中間擴(kuò)張
     

當(dāng)我們打開(kāi)電視機(jī)時(shí),都有這樣的感覺(jué):電視圖像是從屏幕中間開(kāi)始,向上下兩個(gè)方向展開(kāi)的,這種效果就是中間擴(kuò)張。中間擴(kuò)張?zhí)匦э@示的原理其實(shí)并不難,在顯示的時(shí)候,先將圖像分成兩部分,將中間分界處顯示在屏幕中央,并快速向上向下掃描圖像,最后將圖像完整的顯示在屏幕上,這樣人們因?yàn)橐曈X(jué)生理的特點(diǎn)就會(huì)看到中間擴(kuò)張的效果。

//中間擴(kuò)張void Middle_expansion(){  //讀取圖片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = Mat(srcImage.size(), CV_8UC3);  imshow("原圖", srcImage);  //定義變量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  namedWindow("中間擴(kuò)張");  for (int i = 1; i <= ImageHeigth/2; i++) {//步長(zhǎng)為1    roiImage = srcImage(Rect(0, ImageHeigth / 2 - i, ImageWidth, i));    roiImage.copyTo(dstImage(Rect(0, ImageHeigth / 2 - i, ImageWidth, i)));    roiImage = srcImage(Rect(0, ImageHeigth / 2, ImageWidth, i));    roiImage.copyTo(dstImage(Rect(0, ImageHeigth / 2, ImageWidth, i)));
   imshow("中間擴(kuò)張", dstImage);    waitKey(5);  }  waitKey(0);}

動(dòng)圖C++怎么實(shí)現(xiàn)圖像的平移

水平柵條特效
     

柵條特效分為水平柵條和垂直柵條,其效果如同將兩手交叉的過(guò)程,柵條顯示的原理是先將圖像分為若干行,將奇數(shù)行組成一組,偶數(shù)行組成一組,在顯示時(shí)奇數(shù)行從右向左平移,偶數(shù)行從左向右平移。

//水平柵條特效void Grid_effect(){  //讀取圖片  Mat srcImage, dstImage;  srcImage = imread("2.jpg");  dstImage = Mat(srcImage.size(), CV_8UC3);  imshow("原圖", srcImage);  //定義變量  Mat roiImage;  int ImageHeigth = srcImage.rows;  int ImageWidth = srcImage.cols;  int step=10;//每個(gè)柵格寬度  namedWindow("中間擴(kuò)張");  for (int i = 1; i < ImageWidth+1; i=i+10) {//步長(zhǎng)為1    for (int j = 0; j < ImageHeigth; j=j+2*step) {//步長(zhǎng)為1      //奇數(shù)行從右往左      roiImage = srcImage(Rect(0, j, i, step));      roiImage.copyTo(dstImage(Rect(ImageWidth - i, j, i, step)));      //偶數(shù)行從左往右      int k = j + step;      roiImage = srcImage(Rect(ImageWidth - i, k, i, step));      roiImage.copyTo(dstImage(Rect(0, k, i, step)));
     imshow("中間擴(kuò)張", dstImage);      waitKey(1);    }  }  waitKey(0);}

動(dòng)圖

C++怎么實(shí)現(xiàn)圖像的平移

到此,相信大家對(duì)“C++怎么實(shí)現(xiàn)圖像的平移”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI