5 用python進行OpenCV實戰之影象變換2(旋轉)
前言
最近有些其他事情,一週未更新了,實在抱歉。以後爭取,每週多更新幾次。雖然也不知道能有多少人看到,但是也算自己的一種堅持吧!
1 旋轉
1.1 旋轉基本操作
旋轉的概念正如我們平常聽見的一樣:將圖片選裝x度。我們先通過多少度來旋轉圖片,然後我們將寫一個旋轉函式。
import numpy as np #1
import argparse #2
import imutils #3
import cv2 #4
ap = argparse.ArgumentParser() #5
ap.add_argument("-i", "--image", required = True,
help = "Path to the image" ) #6
args = vars(ap.parse_args()) #7
image = cv2.imread(args["image"]) #8
cv2.imshow("Original", image) #9
(h, w) = image.shape[:2] #10
center = (w // 2, h // 2) #11
M = cv2.getRotationMatrix2D(center, 45, 1.0) #12
rotated = cv2.warpAffine(image, M, (w, h)) #13
cv2.imshow("Rotated by 45 Degrees", rotated) #14
M = cv2.getRotationMatrix2D(center, -90, 1.0) #15
rotated = cv2.warpAffine(image, M, (w, h)) #16
cv2.imshow("Rotated by -90 Degrees", rotated) #17
rotated = imutils.rotate(image, 180) #18
cv2.imshow("Rotated by 180 Degrees", rotated) #19
cv2.waitKey(0) #20
#1-9:
與前幾節一樣的操作,進行導包,然後顯示原始圖片,但是需要注意的是在第三行 import imutils,還記得它是什麼嗎?我們在上一節還詳細介紹過啊。忘記了,可以返回
#10-11:
在第10行中我們得到了影象的寬和高,然後我們通過”//”將它們除以2取整來得到旋轉的中心。當然我們也可以不以中心為旋轉中心,這裡為了方便。
#12:
正如我們定義一個矩陣來移動影象一樣,我們還需要定義一個矩陣來旋轉影象,然而不同的是我們不是通過NumPy來構造矩陣的,而是通過:
cv2.getRotationMatrix2D()
第一個引數:表示向以哪一點進行旋轉?這裡就是影象的中心
第二個引數:表示我們希望旋轉的角度。這裡為正45度,表示順時針旋轉45度
第三個引數:表示影象旋轉後的大小,這裡設為1表示大小與原圖大小一致
#13-14:
通過cv2.warpAffine()方法,我們便可進行旋轉影象的操作,第一個引數為原圖,第二個引數為旋轉矩陣,第三個引數為影象(寬,高)的元組,然後將旋轉後的影象顯示出來
#15-17:
採用同樣的方法將影象逆時針旋轉90度,然後展示出來
#18-20:
在第18行我們使用了:imutils這個自己寫的庫,然後呼叫了rotate()方法。第一個引數是需要操作的影象,第二個引數是要旋轉的度數。
1.2 自寫的函式庫
在imutils.py中我們自定義rotate函式
def rotate(image, angle, center=None, scale=1.0): #1
(h, w) = image.shape[:2] #2
if center is None: #3
center = (w // 2, h // 2) #4
M = cv2.getRotationMatrix2D(center, angle, scale) #5
rotated = cv2.warpAffine(image, M, (w, h)) #6
return rotated #7
#1-4:
我們的旋轉方法又四個引數,第一個是影象,第二個是我們所希望旋轉的角度,我們還提供了兩個可選擇的變數:中心點和規模。中心點是我們希望我們的影象圍繞哪一點旋轉?如果,沒有給它賦值,我們會預設將影象的中心點賦值給它。規模大小我們預設為1.0,表示沒有任何大小的變化。
#5-7:
通過構造我們的旋轉矩陣,然後我們將旋轉後的結果返回。
2 效果展示
相關推薦
5 用python進行OpenCV實戰之影象變換2(旋轉)
前言 最近有些其他事情,一週未更新了,實在抱歉。以後爭取,每週多更新幾次。雖然也不知道能有多少人看到,但是也算自己的一種堅持吧! 1 旋轉 1.1 旋轉基本操作 旋轉的概念正如我們平常聽見的一樣:將圖片選裝x度。我們先通過多少度來旋轉圖片,然後我們將
4 用python進行OpenCV實戰之影象變換1(平移)
前言 到目前為止,經過前幾節的介紹,我們已經有了一個堅實的基礎去做一些影象處理,在本節我們先將介紹影象變換中的平移,為後面幾節學習影象變換中的旋轉、改變大小、映象、裁剪打下一個好的基礎 1 平移 1.1 平移基本操作 新建 translatio
2 用python進行OpenCV實戰之影象基本知識
前言 在這一節,我們將學習影象的基本構成單元——畫素,我們將詳細的探討什麼是畫素?畫素是如何使用來構成影象的?然後學習如何通過OpenCV來獲取和操縱畫素。 1 什麼是畫素 所有的影象都包含一組畫素,畫素是影象的原始構建塊。 沒有比畫素更細的單位了。
3 用python進行OpenCV實戰之畫圖(直線,矩形,圓形)
前言 在上一節我們通過使用NumPy的陣列分割成功的在我們的影象上畫了一個綠色的方塊,但是如果我們想畫一個單一的線條或者圓圈該怎麼辦呢?NumPy沒有提供相關的功能,但是OpenCV提供了相關的函式,在本節就將為大家介紹三個基本的OpenCV畫圖方法:
用 Python 和 OpenCV 檢測圖片上的條形碼(轉載)
原文地址:http://python.jobbole.com/80448/ 假設我們要檢測下圖中的條形碼: 圖1:包含條形碼的示例圖片 現在讓我們開始寫點程式碼,新建一個檔案,命名為detect_barcode.py,開啟並編碼: Python 1&nbs
《用Python進行自然語言處理》程式碼筆記(五):第七章:從文字提取資訊
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : Peidong # @Site : # @File : eg7.py # @Software: PyCharm """ 從文字提取資訊 """
linux下用python進行opencv開發----簡單的圖片操作
初學opencv做的例子程式,儲存一下。 之所以選擇用python,是因為python上手快,開發快。 #!/usr/bin/python2 # coding: utf-8 import cv2 import numpy as np #原始圖片 image = cv
jenkins實戰之jenkins安裝部署(二)
自動化運維 上一小節介紹了Jenkins安裝(Linux/uninx平臺),這節我們講講Jenkins界面操作(包括系統設置,工具安裝,插件管理,系統升級,安全設置等等操作); 登錄jenkins首頁,分別有以下選項欄,從左側看起,點擊Jenkins系統管理我們會看到右側list欄,內
Appium python自動化測試系列之appium環境搭建(二)
ftp 自動化 手動 文件 搭建環境 做到 安裝python reg 成員 ?2.1 基礎環境搭建 當我們學習新的一項技術開始基本都是從環境搭建開始,本書除了第一章節也是的,如果你連最基礎的環境都沒有那麽我們也沒必要去說太多,大概介紹一下: 1、因為appium是支持and
python學習--標準庫之os 實例(3)
import 創建 int pri format mat dir pat env #!/usr/bin/env python3 # -*- coding: utf-8 -*- #列出當前目錄下文件的大小和創建日期及文件名,相當於ls -l命令 from datetime
PHP初級練習實戰之公司留言板(原生)
ali 日期 元素 align display 初學 locate padding asi PHP初級練習實戰之留言板初學者做的東西,有的地方寫的不好,哈哈哈!一.知識重點1.三目運算 $page= empty($_GET[‘p‘]) ? 1: $_GET[‘p‘];2.數
python數據結構之雙隊列(二)
self for __init__ pri solid pen odin __name__ urn 書接上文,雙端隊列區別於單隊列為:雙端隊列可以對隊列頭和尾部同時進行操作,單隊列不行#coding:utf-8 class DoubleQueue(object):
Java伺服器部署基於OpenCV的C++影象處理專案(三)圖片上傳並返回處理圖
Java伺服器部署基於OpenCV的C++影象處理專案(三)圖片上傳並返回處理圖 1.上傳圖片並返回灰度圖功能 由於使用的springboot開發,直接寫一個upload介面供圖片上傳,以下是springboot主函式以及upload介面。 package com.e
Java伺服器部署基於OpenCV的C++影象處理專案(二)編譯篇
Java伺服器部署基於OpenCV的C++影象處理專案(二)編譯篇 部署好環境之後,本篇記錄編譯的詳細步驟。部署環境篇 1.建立檔案 在native.cpp中寫入以下程式碼。 #include <jni.h> #include <string>
Java伺服器部署基於OpenCV的C++影象處理專案(一)
Java伺服器部署基於OpenCV的C++影象處理專案(一) 由於最近專案需要在後臺處理圖片並返回結果給移動端,所以折騰了一週如何將c++程式碼和opencv打包並部署到java伺服器中供後臺呼叫,這裡記錄下詳細過程。 基礎環境 伺服器環境: 阿里雲伺服器 Red Hat 4
Vue實戰之後臺管理系統(一)
這個系列是手把手教大家從零開始寫一個後臺管理系統,使用的技術:vuejs+vue-router+axios+vuex+element-ui+scss。 1.開發環境搭建 開始寫程式碼前準備工作要做好,包括vue開發環境,除錯工具的安裝,webstorm的配置
Docker學習總結(3)——Docker實戰之入門以及Dockerfile(三)
應用映象 csphere/wordpress:4.2 # cd docker-training/wordpress/ # ls -a . license.txt wp-config-sample.php wp-login.
利用Python進行百度文庫內容爬取(一)
新手上路 在很多時候我們需要下載百度文庫內容的時候,彈出來的是下載券不足,而現在複製其中的內容也只能複製一部分,如果遇到一些政治開卷考,考前抱佛腳,想要複製出文庫中的內容,可謂是難上加難。 對百度文庫內容的獲取,從最開始的大部分文件可以免費直接從中直接下載,
機器學習實戰之k-近鄰演算法(3)---如何視覺化資料
關於視覺化: 《機器學習實戰》書中的一個小錯誤,P22的datingTestSet.txt這個檔案,根據網上的原始碼,應該選擇datingTestSet2.txt這個檔案。主要的區別是最後的標籤,作者原來使用字串‘veryLike’作為標籤,但是Python轉換會出現Val
【利用python進行資料分析】準備與例項(一)
我已經分享了本書的ipynb,所以跟著我一起來實驗吧。如果你不懂怎麼開啟ipynb格式的檔案,那也沒關係,anaconda3讓一切變得更簡單(我像是打廣告的)。安裝玩anaconda之後,我們在開始裡就可以找到它的資料夾,裡面有一個Jupyter Notebook,就是它了。