opencv-python單目視覺標定,簡單易用。

import cv2
import numpy as np
import glob# 設置尋找亞像素角點的參數,采用的停止準則是最大循環次數30和最大誤差容限0.001
criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)# 獲取標定板角點的位置
objp = np.zeros((6 * 7, 3), np.float32)
objp[:, :2] = np.mgrid[0:7, 0:6].T.reshape(-1, 2)  # 將世界坐標系建在標定板上,所有點的Z坐標全部為0,所以只需要賦值x和yobj_points = []  # 存儲3D點
img_points = []  # 存儲2D點images = glob.glob('C:\Users\Administrator\Desktop\cal_camera\cam\*.bmp')
for fname in images:img = cv2.imread(fname)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)size = gray.shape[::-1]ret, corners = cv2.findChessboardCorners(gray, (7, 6), None)if ret:obj_points.append(objp)corners2 = cv2.cornerSubPix(gray, corners, (5, 5), (-1, -1), criteria)  # 在原角點的基礎上尋找亞像素角點if True:img_points.append(corners2)else:img_points.append(corners)cv2.drawChessboardCorners(img, (7, 6), corners, ret)  # 記住,OpenCV的繪制函數一般無返回值cv2.imshow('img', img)cv2.waitKey(50)print len(img_points)
cv2.destroyAllWindows()# 標定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, img.shape[:2], None, None)
print "標定"
print "ret:", ret
print "mtx:\n", mtx  # 內參數矩陣內參數的輸出向量。輸出順序為:
# (fx,fy,cx,cy,)
# {k1,k2,p1,p2,k3,k4,k5,k6,s1,s2,s3,s4,τx,τy} ,如果不估計其中某一個參數,值等于0
print "dist:\n", dist  # 畸變系數   distortion cofficients = (k_1,k_2,p_1,p_2,k_3)
print "rvecs:\n", rvecs  # 旋轉向量  # 外參數
print "tvecs:\n", tvecs  # 平移向量  # 外參數print("-----------------------------------------------------")
# 畸變校正
img = cv2.imread('C:\Users\Administrator\Desktop\cal_camera\cam\cam2.bmp')
h, w = img.shape[:2]
'''
#使用cv.getOptimalNewCameraMatrix()優化內參數和畸變系數,
# 通過設定自由自由比例因子alpha。當alpha設為0的時候,
# 將會返回一個剪裁過的將去畸變后不想要的像素去掉的內參數和畸變系數;
# 當alpha設為1的時候,將會返回一個包含額外黑色像素點的內參數和畸變系數,并返回一個ROI用于將其剪裁掉。'''newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w, h), 1, (w, h))
print newcameramtx
print("------------------使用undistort函數-------------------")
#該功能可轉換圖像以補償徑向和切向鏡頭失真。
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
x, y, w, h = roi
dst1 = dst[y:y + h, x:x + w]
cv2.imwrite('calibresult11.jpg', dst1)
print "方法一:dst的大小為:", dst1.shape# undistort方法二
print("-------------------使用重映射的方式-----------------------")
'''
該函數計算聯合不變形和整流變換并代表。
以重映射的映射形式。未失真的圖像看起來像原始圖像,就像它一樣。
使用相機矩陣= newCameraMatrix和零失真用相機拍攝。如果是。
單目相機,newCameraMatrix通常等于cameraMatrix,或者它可以通過計算。cv :: getOptimalNewCameraMatrix用于更好地控制縮放。
'''
mapx, mapy = cv2.initUndistortRectifyMap(mtx, dist, None, newcameramtx, (w, h), 5)  # 獲取映射方程
# dst = cv2.remap(img,mapx,mapy,cv2.INTER_LINEAR)      # 重映射
dst = cv2.remap(img, mapx, mapy, cv2.INTER_CUBIC)  # 重映射后,圖像變小了
x, y, w, h = roi
dst2 = dst[y:y + h, x:x + w]
cv2.imwrite('calibresult11_2.jpg', dst2)
print "方法二:dst的大小為:", dst2.shape  # 圖像比方法一的小print("-------------------計算反向投影誤差-----------------------")
tot_error = 0
for i in xrange(len(obj_points)):img_points2, _ = cv2.projectPoints(obj_points[i], rvecs[i], tvecs[i], mtx, dist)error = cv2.norm(img_points[i], img_points2, cv2.NORM_L2) / len(img_points2)tot_error += errormean_error = tot_error / len(obj_points)
print "total error: ", tot_error
print "mean error: ", mean_error

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252014.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252014.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python多線程多進程

一、線程&進程 對于操作系統來說,一個任務就是一個進程(Process),比如打開一個瀏覽器就是啟動一個瀏覽器進程,打開一個記事本就啟動了一個記事本進程,打開兩個記事本就啟動了兩個記事本進程&#xff0c…

Spring Framework 5.1.6、5.0.13 與?4.3.23 發布

開發四年只會寫業務代碼,分布式高并發都不會還做程序員? Spring Framework 5.1.6、5.0.13 與 4.3.23 發布了。 v5.1.6 包含 49 個 bug 修復和功能改進;v5.0.13 是 5.0.x 系列的最后一個版本,包含了 25 個 bug 修復和功能改進&am…

curl命令

Curl是一種支持多種協議(http、https,ftp)等,利用url規則在命令行下工作的文件傳輸工具,還支持POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字符串、限速、文件大小、進度條等特征 1.語法: cu…

單目視覺標定:世界坐標系、相機坐標系、圖像坐標系、像素坐標系——簡單粗暴,粗暴

轉:https://blog.csdn.net/chentravelling/article/details/53558096 1.正文 圖像處理、立體視覺等等方向常常涉及到四個坐標系:世界坐標系、相機坐標系、圖像坐標系、像素坐標系。例如下圖: 構建世界坐標系只是為了更好的描述相機的位置在哪…

Python基礎知識-05-數據類型總結字典

python其他知識目錄 1、一道題,選擇商品的序號。程序員和用戶各自面對的序號起始值 如有變量 googs [汽車,飛機,火箭] 提示用戶可供選擇的商品: 0,汽車1,飛機2,火箭用戶輸入索引后,將指定商品的內容拼接打印,如:用戶輸…

Python學習筆記之異常

Python用異常對象來表示異常情況,如果異常對象未被處理或捕捉,程序就會回溯(traceback)中止執行。 異常可以在出錯時自動引發,也可以主動引發。 異常被引發后如果不被處理就會傳播至程序調用的地方,直到主程…

VSFTP的使用

一、基本安裝 1.安裝服務 yum -y install vsftpd //centos Redhat apt-get install vsftpd //debian ubuntu 2.開啟服務 service vsftpd status //查看狀態,默認是關閉的 service vsftpd start 3.開機隨操作系統啟動 chkconfig vsftpd on4.添加賬號 useradd -d /…

OC Swift混編-Swift.h File not found

https://www.jianshu.com/p/f860fe1718ca 2016.09.13 11:53* 字數 266 閱讀 1935評論 1喜歡 1今天碰到個神坑,本人項目是OC項目,最近開始使用Swift開始替代.但是,在替代的已開始就出現問題了:新建swift文件,然后提示創建bridging-Hearder文件,然后swift可以使用OC代碼了.這些都…

視覺標定,再來一波!!更簡單粗暴!!!!!!

繼續!!!!!! 一、四個坐標系簡介和轉換 相機模型為以后一切標定算法的關鍵,只有這邊有相當透徹的理解,對以后的標定算法才能有更好的理解。本人研究了好長時間,幾乎每天…

深入淺出NIO之Selector實現原理

2019獨角獸企業重金招聘Python工程師標準>>> 前言 Java NIO 由以下幾個核心部分組成: 1、Buffer 2、Channel 3、Selector Buffer和Channel在深入淺出NIO之Channel、Buffer一文中已經介紹過,本文主要講解NIO的Selector實現原理。 之前進行sock…

介紹一下畫圖小能手matplotlib。

我們在做完數據分析的時候需要把分析出來的結果,做一個圖形化的形象表達,這里我們就需要用到畫圖小能手matplotlib,下面就演示一下常用的條形圖和折線圖 散點圖 散點圖的做大的作用是研究兩個變量的相關性(正相關,負相…

立體視覺標定源代碼C++,簡單粗暴!粗暴·······

疑點解答: 攝像機矩陣由內參矩陣和外參矩陣組成,對攝像機矩陣進行QR分解可以得到內參矩陣和外參矩陣。 內參包括焦距、主點、傾斜系數、畸變系數 (1) 其中,fx,fy為焦距,一般情況下&#xff…

11. 臨時表

-- 查詢5大洲國家總數 SELECT continent,COUNT(*) FROM country GROUP BY continent;-- 演示臨時表 CREATE TEMPORARY TABLE tmp_table ( continent VARCHAR(20), COUNT INT );INSERT INTO tmp_table SELECT Asia AS continent,COUNT(*) FROM country WHERE continent Asia;…

MongoDB負載信息一目了然 阿里云HDM重磅發布MongoDB監控和診斷功

2019獨角獸企業重金招聘Python工程師標準>>> 混合云數據庫管理(HDM)的統一監控、告警、診斷功能新增了對MongoDB的支持。 通過直觀的方式將MongoDB多個維度的負載信息統一整合,不僅可以清晰的查看實時負載信息,也可以方…

在iview的Table中添加Select(render)

首先對Render進行分析,在iview官方的文檔中,找到了table插入Button的例子: [javascript] view plaincopy { title: Action, key: action, width: 150, align: center, render: (h, params) > { return h(div, [ h(Butt…

JavaScript中call和apply方法

1 /*2 在js中 call和apply常用于綁定作用域3 */4 //1 簡單的綁定5 function sum(a,b){6 return ab;7 }8 //將sum的功能綁定給test2來執行9 function test2(a,b){ 10 return sum.call(this,a,b); 11 } 12 // call 和apply的區別是 apply接收數組作為參數…

工業機械人運動學正逆解,簡單粗暴!!!!!!

ur機械臂是六自由度機械臂,由D-H參數法確定它的運動學模型,連桿坐標系的建立如上圖所示。 轉動關節θi是關節變量,連桿偏移di是常數。 關節編號 α(繞x軸) a(沿x軸) θ(繞z軸&am…

python opencv立體測距 立體匹配BM算法

立體標定應用標定數據轉換成深度圖標定 在開始之前,需要準備的當然是兩個攝相頭,根據你的需求將兩個攝像頭進行相對位置的固定,我是按平行來進行固定的(如果為了追求兩個雙目圖像更高的生命度,也可以將其按一定鈍角固…

對于python 作用域新的理解

今天看Python習題,看到如下題目 def num():return [lambda x: i*x for i in range(4)] print([m(2) for m in num()])  # 求輸出結果是什么 我看了半天才明白這應該是一個列表生成式,列表中的元素為四個匿名函數,我本以為每個匿名函數應該是…

Vue基礎學習(一)------內部指令

一.v-if v-else v-show 指令 1.v-if v-if:是vue 的一個內部指令,指令用在我們的html中,用來判斷是否加載html的DOM 現在舉個栗子,判斷用戶的登錄操作,用isLogin作為一個判斷字段,登錄成功,就顯示用戶的名稱 代碼&…