欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么在OpenCV中利用C++實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果-創(chuàng)新互聯(lián)

本篇文章為大家展示了怎么在OpenCV中利用C++ 實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到禹王臺(tái)網(wǎng)站設(shè)計(jì)與禹王臺(tái)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋禹王臺(tái)地區(qū)。

圖片旋轉(zhuǎn),本質(zhì)上是對(duì)旋轉(zhuǎn)后的圖片中每個(gè)像素點(diǎn)計(jì)算在原圖的位置。然后照搬過(guò)來(lái)就好。

圖形圖像課上一般會(huì)介紹旋轉(zhuǎn)變換矩陣,其中 t 為需要旋轉(zhuǎn)的角度,[x'; y']是變換后坐標(biāo)(其中分號(hào)表示上下關(guān)系):


怎么在OpenCV中利用C++ 實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果

即表示為:[x'; y'] = [cos(t) sin(t); -sin(t) cos(t)][x; y]

因?yàn)槲覀€(gè)人興趣愛(ài)好(放P就是老師逼的。。。),不允許使用 OpenCV 封裝好的旋轉(zhuǎn)函數(shù)。只能自己實(shí)現(xiàn),我開(kāi)始的想法是:先求變換矩陣逆矩陣,然后將一張全黑圖中每個(gè)點(diǎn)一一對(duì)應(yīng)插值到原圖中。

結(jié)果發(fā)現(xiàn)轉(zhuǎn)換后圖片全黑了……

后來(lái)發(fā)現(xiàn)原點(diǎn)設(shè)置不對(duì)。用OpenCV中的 Mat格式存儲(chǔ)(或二維數(shù)組)的圖片, 原點(diǎn)在左上角 。但是想要實(shí)現(xiàn)的 旋轉(zhuǎn)原點(diǎn)在圖片中心 。

同時(shí), Mat格式存儲(chǔ)(或二維數(shù)組)的 坐標(biāo)系中 y軸正方向向下 。這樣人類視覺(jué)上的順時(shí)針旋轉(zhuǎn),在二維數(shù)組的坐標(biāo)系中是逆時(shí)針旋轉(zhuǎn)。

最重要的一點(diǎn),也是二維數(shù)組操作中極易忽略的一點(diǎn): 數(shù)組操作的是 數(shù)組下標(biāo) ,不是坐標(biāo)系(數(shù)組的行數(shù) rows 是矩形的寬 width ,列數(shù) cols 是矩形的長(zhǎng) length ) 。比如坐標(biāo)系(此時(shí)為了更貼近數(shù)組布局,我們 假設(shè) y 軸坐標(biāo)系是向下的 )中,矩形頂點(diǎn)是:

怎么在OpenCV中利用C++ 實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果

但是在數(shù)組中,因?yàn)槭切袃?yōu)先,所以四個(gè)點(diǎn)的下標(biāo)取值為:

怎么在OpenCV中利用C++ 實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果

有沒(méi)有發(fā)現(xiàn),兩種坐標(biāo)是相反的!

總結(jié)下來(lái),我們的圖片旋轉(zhuǎn)需要注意以下幾點(diǎn):

  1. 變換后圖片中的每個(gè)像素點(diǎn)(i; j),需要平移到相對(duì)旋轉(zhuǎn)中心的新坐標(biāo),即(i - Mat.rows/2; j - Mat.cols/2)。計(jì)算完成之后,需要再次 還原 到相對(duì)左上角原點(diǎn)的舊坐標(biāo);

  2. 本來(lái)需要 變換后圖片 乘以 原圖 變換矩陣的 逆矩陣 對(duì)應(yīng)到原圖中坐標(biāo)。但是因?yàn)閥軸方向向下,所以 變換后圖片 乘以 原圖 變換矩陣(無(wú)需逆矩陣) 即可對(duì)應(yīng)到原圖中坐標(biāo)(順時(shí)針旋轉(zhuǎn)50度,還原操作是逆時(shí)針旋轉(zhuǎn)50度);

  3. 矩陣下標(biāo)與原圖變換矩陣相乘之前,需要將矩陣 下標(biāo)兩值互換 。相乘之后,需要 再次互換下標(biāo)值 還原成矩陣下標(biāo)。

因此對(duì)于一個(gè)經(jīng)過(guò)旋轉(zhuǎn) t 度之后 數(shù)組下標(biāo) 為[m‘, n']的像素值,還原成原圖中的 數(shù)組下標(biāo) [m; n]計(jì)算為:

[cos(t) -sin(t); sin(t) cos(t)] ([m'; n'] - [Mat.rows/2; Mat.cols/2]) = [m; n] -  [Mat.rows/2; Mat.cols/2]

源代碼附上:

Mat nearestNeighRotate(cv::Mat img, float angle)
{
	int len = (int)(sqrtf(pow(img.rows, 2) + pow(img.cols, 2)) + 0.5);

	Mat retMat = Mat::zeros(len, len, CV_8UC3);
	float anglePI = angle * CV_PI / 180;
	int xSm, ySm;

	for(int i = 0; i < retMat.rows; i++)
		for(int j = 0; j < retMat.cols; j++)
		{
			xSm = (int)((i-retMat.rows/2)*cos(anglePI) - (j-retMat.cols/2)*sin(anglePI) + 0.5);
			ySm = (int)((i-retMat.rows/2)*sin(anglePI) + (j-retMat.cols/2)*cos(anglePI) + 0.5);
			xSm += img.rows / 2;
			ySm += img.cols / 2;

			if(xSm >= img.rows || ySm >= img.cols || xSm <= 0 || ySm <= 0){
				retMat.at<Vec3b>(i, j) = Vec3b(0, 0);
			}
			else{
				retMat.at<Vec3b>(i, j) = img.at<Vec3b>(xSm, ySm);
			}
		}

	return retMat;
}

好,我們來(lái)測(cè)試看看:

int main() 
{ 
	Mat img = imread("../HelloWorld.png");
	retImg = nearestNeighRotate(img, -20.f);
	namedWindow("nearNeigh", CV_WINDOW_AUTOSIZE);
	imshow("nearNeigh", retImg);

	waitKey(); 
	cvDestroyAllWindows();
	return 0; 
}

上述內(nèi)容就是怎么在OpenCV中利用C++ 實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

分享文章:怎么在OpenCV中利用C++實(shí)現(xiàn)一個(gè)圖片旋轉(zhuǎn)效果-創(chuàng)新互聯(lián)
文章URL:http://aaarwkj.com/article48/gjhhp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司
国产精品国产亚洲av| 欧美精品亚洲二区中文乱码| 九九热这里只有免费视频| 亚洲黄香蕉视频免费看| 日日摸夜夜添添出白浆| 日韩欧美一级性生活片| 曰韩精品一区二区三区乱码| dy888午夜福利精品国产97| 久久成人影院免费观看| 日韩中文字幕久久中文字幕| 中文字幕丝袜精品久久| 成熟性性生活免费视频| 国产专区亚洲精品欧美| 免费观看中国性生活片| 国产伦理免费精品中文字幕| 亚洲毛片高清一区二区三区| 国产亚洲欧美成人精品久久| 免费亚洲一区二区三区| 国产一区二区三区婷婷| 日韩欧美二区三区精品在线| 欧美激情韩国三级日本| 亚洲精品欧美综合第四区| 亚洲天堂av日韩在线| 久青青国产综合自拍视频在线观看 | 国产精品_国产精品_k频道| 91久久久久久人妻精品粉嫩| 日本韩国国语对白一区二区三区| 高潮内射一区二区三区| 秋霞日韩欧美一区二区三区| 久久久av在线免费观看| 久草手机福利在线观看| 亚洲一区二区偷拍精品| 在线观看午夜视频免费| 欧美影院波波在线影院| 我想看日韩一级黄色片| 久久精品夜夜夜夜夜久久| 欧美性生活之欧美日韩| 久热99在线视频免费观看| 日本在线一区二区中文| 国欧美一区二区三区| 欧美大片黄片在线观看|