日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV——图像的平移旋转

發布時間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV——图像的平移旋转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.學習圖像數據格式Mat

像素就是把圖形分割成很多大小相等的小正方形,其中每一個都是一個像素。我們常見的800*600的圖形,800代表寬度,600代表高度。

灰度圖像就是黑白灰,只有這三種顏色,其實就是不同程度的灰色。灰度圖像中的像素用8位無符號數,0表示黑色,255表示白色,中間的則為不同程度的灰色。8位無符號數就是2的8次方,即255。一個8位色的像素,可以顯示的顏色為2的八次方,0到255,就是能顯示出256中顏色。

**需要掌握的基礎函數操作:

Mat img; //定義一個可以存儲圖像的空間名為img

imread(“e:\1.jpg”); //讀取路徑中的圖像

Imwrite(“e:\2.jpg”,img); //將img中存儲的圖像保存到e盤并命名為2.jpg

if(img.empty()); //如果img中沒有存儲圖像,則img.empty()=1否則為0

namedWindow("原圖像"); //命名一個窗口的名稱為“原圖像”

imshow("原圖像", img); //展示img圖像到“原圖像”窗口

destroyWindow("原圖像"); //銷毀(關閉)窗口

cvtColor(img,img,CV_BGR2GRAY); //將img圖轉換為灰度圖存到img中

img.at<Vec3b>(i, j)[0] = 0; //img彩色圖像中坐標為(i,j)的像素點,將其藍通道設置為黑色

Matdst = img.clone(); //將img復制存儲到dst中

2圖片的提取

#include<opencv2\opencv.hpp>
using namespace cv;
int main()
{Mat picture = imread("Jmu.jpg");//圖片必須添加到工程目錄下imshow("測試程序", picture);waitKey(0);
}
using namespace cv;
int main()
{Mat picture = imread("Jmu.jpg");//圖片必須添加到工程目錄下imshow("測試程序", picture);waitKey(0);
}

運行結果:

?

3.圖形的讀取、轉灰度圖、顯示、保存

#include<opencv2\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char **argv )
{Mat img = imread("h:\\1.jpg");//將一張圖片存儲,讀取到imgMat grayimg;cvtColor(img, grayimg, CV_BGR2GRAY);//將原圖轉化成灰度圖片,存儲到grayimgimwrite("h:\\grayimg.jpg", grayimg);
?if (img.empty())//如果圖片不存在的情況{cout << "error"<<endl;system("pause");return 0;}
?imwrite("h:\\2.bmp", img);//將圖片轉化為其他格式存儲cout << "像素列數(寬度):" << img.cols << endl << "像素行數(高度):" << img.rows;
?namedWindow("原圖像");//命名一個圖像窗口imshow("原圖像",img);//顯示圖像cvtColor(img, img, CV_BGR2GRAY);namedWindow("灰度圖像");imshow("灰度圖像",img);
?
?system("pause");//銷毀窗口destroyWindow("原圖像");destroyWindow("灰度圖像");
?return 0;
}
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char **argv )
{Mat img = imread("h:\\1.jpg");//將一張圖片存儲,讀取到imgMat grayimg;cvtColor(img, grayimg, CV_BGR2GRAY);//將原圖轉化成灰度圖片,存儲到grayimgimwrite("h:\\grayimg.jpg", grayimg);
?if (img.empty())//如果圖片不存在的情況{cout << "error"<<endl;system("pause");return 0;}
?imwrite("h:\\2.bmp", img);//將圖片轉化為其他格式存儲cout << "像素列數(寬度):" << img.cols << endl << "像素行數(高度):" << img.rows;
?namedWindow("原圖像");//命名一個圖像窗口imshow("原圖像",img);//顯示圖像cvtColor(img, img, CV_BGR2GRAY);namedWindow("灰度圖像");imshow("灰度圖像",img);
?
?system("pause");//銷毀窗口destroyWindow("原圖像");destroyWindow("灰度圖像");
?return 0;
}

通常在結尾return 0;前面使用waitKey(0);用于觀測實驗結果,否則實現結果往往一閃而過。

或者參考使用system(“pause”);

4.圖片的平移

#include<opencv2\opencv.hpp>
?
#include<iostream>
using namespace std;
using namespace cv;
void imMove(Mat img, Mat &dst, int x, int y)
{int MaxHeight = img.rows;//設定最大高度為圖形高度int MaxWidth = img.cols;//設定最大寬度為圖形寬度int i;int j;for (i = 0 ; i < MaxHeight; i++){for (j = 0; j < MaxWidth; j++){//判斷位置后將像素逐個賦予到新的位置if (i - x > 0 && i - x < MaxHeight&&j - y>0 && j - y < MaxWidth)dst.at<Vec3b>(i, j) = img.at<Vec3b>(i - x, j - y);else{dst.at<Vec3b>(i, j)[0] = 0;dst.at<Vec3b>(i, j)[1] = 0;dst.at<Vec3b>(i, j)[2] = 0;
?}}}
}
?
int main(void)
{Mat img = imread("h:\\1.jpg");Mat dst = img.clone();imshow("原圖", img);
?int x, y;cout << "水平移動的距離" << endl;cin >> x;cout << endl << "輸入垂直移動距離";cin >> y;imMove(img, dst, y, x);imshow("平移后的圖像",dst);imwrite("h:\\2.jpg", dst);//保存平移后的圖片waitKey(0);
?return 0;
?
}
?
#include<iostream>
using namespace std;
using namespace cv;
void imMove(Mat img, Mat &dst, int x, int y)
{int MaxHeight = img.rows;//設定最大高度為圖形高度int MaxWidth = img.cols;//設定最大寬度為圖形寬度int i;int j;for (i = 0 ; i < MaxHeight; i++){for (j = 0; j < MaxWidth; j++){//判斷位置后將像素逐個賦予到新的位置if (i - x > 0 && i - x < MaxHeight&&j - y>0 && j - y < MaxWidth)dst.at<Vec3b>(i, j) = img.at<Vec3b>(i - x, j - y);else{dst.at<Vec3b>(i, j)[0] = 0;dst.at<Vec3b>(i, j)[1] = 0;dst.at<Vec3b>(i, j)[2] = 0;
?}}}
}
?
int main(void)
{Mat img = imread("h:\\1.jpg");Mat dst = img.clone();imshow("原圖", img);
?int x, y;cout << "水平移動的距離" << endl;cin >> x;cout << endl << "輸入垂直移動距離";cin >> y;imMove(img, dst, y, x);imshow("平移后的圖像",dst);imwrite("h:\\2.jpg", dst);//保存平移后的圖片waitKey(0);
?return 0;
?
}

?

運行結果:

5.圖片的旋轉,縮放

getRotationMatrix2D(1.圖像旋轉中心, 2.旋轉角度 ,3.縮放尺寸)

warpAffine(1.輸入源圖像 ,2.輸出圖像,3.仿射變換矩陣,4.輸出圖像的尺寸)

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
?
int main()
{//Point2f就類似定義一個float型Mat img = imread("h:\\1.jpg");Point2f center = Point2f(img.cols / 2, img.rows / 2);//設定旋轉中心double angle;//旋轉角度double scale;//縮放尺度printf("輸入旋轉的角度:");cin >> angle;printf("輸入縮放的尺度:");cin >> scale;
?
?Mat rotateMat;rotateMat = getRotationMatrix2D(center, angle, scale);//旋轉中心,旋轉角度,縮放尺度Mat rotateImg;warpAffine(img, rotateImg, rotateMat, img.size());//輸入源圖像,輸出圖像,仿射變換矩陣,輸出圖像尺寸imshow("原圖像", img);imshow("旋轉后的圖像", rotateImg);imwrite("h://2.jpg", rotateImg);//存儲旋轉后的圖片waitKey(0);system("pause");return 0;
}
?
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
?
int main()
{//Point2f就類似定義一個float型Mat img = imread("h:\\1.jpg");Point2f center = Point2f(img.cols / 2, img.rows / 2);//設定旋轉中心double angle;//旋轉角度double scale;//縮放尺度printf("輸入旋轉的角度:");cin >> angle;printf("輸入縮放的尺度:");cin >> scale;
?
?Mat rotateMat;rotateMat = getRotationMatrix2D(center, angle, scale);//旋轉中心,旋轉角度,縮放尺度Mat rotateImg;warpAffine(img, rotateImg, rotateMat, img.size());//輸入源圖像,輸出圖像,仿射變換矩陣,輸出圖像尺寸imshow("原圖像", img);imshow("旋轉后的圖像", rotateImg);imwrite("h://2.jpg", rotateImg);//存儲旋轉后的圖片waitKey(0);system("pause");return 0;
}
?

6.實驗樓 實驗1

?

解釋器

Python 是一個腳本語言,你可以在 Python 解釋器中直接寫代碼或者將代碼寫到一個文件里,然后執行這個文件(即腳本文件)。首先,我們從使用解釋器開始,打開終端,鍵入python3 并回車。這個時候解釋器便工作于交互模式。按 Ctrl + D 輸入一個 EOF 字符來退出解釋器,你也可以鍵入 exit() 來退出解釋器。

腳本文件

先啟動 Vim 并編輯 China。py,啟動后不要亂按鍵。然后按 i 鍵進入插入模式,此時你可以看到左下角有 “插入” 兩個字,現在你可以鍵入代碼了。然后按 Esc 鍵退出插入模式,再鍵入 :wq 回車,Vim 就會保存文件并退出。要運行腳本文件 China.py,還要為文件添加可執行權限: chmod +x helloworld.py,然后執行腳本文件:$ ./helloworld.py

完成本實驗后,明白了如何使用交互模式的 Python3 解釋器,如何簡單使用 vim 編寫腳本文件并執行這個腳本文件,要特別注意的是,Python 使用縮進來定義語句塊,縮進是 Python 語法的一部分,這與其它大多數語言不同。

?

?

?

總結

以上是生活随笔為你收集整理的OpenCV——图像的平移旋转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。