1. 程式人生 > >5 用python進行OpenCV實戰之影象變換2(旋轉)

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畫圖方法:

PythonOpenCV 檢測圖片上的條形碼轉載

  原文地址: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,就是它了。