Python 如何从未失真图像中删除黑色边框
我一直在其他帖子中寻找回复,并尝试了几种方法来获得回复,但我找不到任何帮助。 我正在处理图像不失真,使用的代码如下图所示,但它没有给出我想要的结果:Python 如何从未失真图像中删除黑色边框,python,opencv,computer-vision,distortion,Python,Opencv,Computer Vision,Distortion,我一直在其他帖子中寻找回复,并尝试了几种方法来获得回复,但我找不到任何帮助。 我正在处理图像不失真,使用的代码如下图所示,但它没有给出我想要的结果: import cv2 import numpy as np criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) cbrow = 7 cbcol = 9 objp = np.zeros((cbrow * cbcol, 3), np.float32) o
import cv2
import numpy as np
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
cbrow = 7
cbcol = 9
objp = np.zeros((cbrow * cbcol, 3), np.float32)
objp[:, :2] = np.mgrid[0:cbcol, 0:cbrow].T.reshape(-1,2)
objpoints = []
imgpoints = []
CHECKERBOARD = (7,9)
img = cv2.imread("ChessUOledVGA.jpg")
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, corners = cv2.findChessboardCorners(gray, CHECKERBOARD, cv2.CALIB_CB_ADAPTIVE_THRESH+cv2.CALIB_CB_FAST_CHECK+cv2.CALIB_CB_NORMALIZE_IMAGE)
print(corners)
if ret == True:
objpoints.append(objp)
corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)
imgpoints.append(corners2)
## Draw and display the corners
img = cv2.drawChessboardCorners(img, (cbcol, cbrow), corners2, ret)
cv2.imshow('img', img)
cv2.waitKey(0)
ret, mtx, dist , rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)
print('mtx', mtx)
print('dist',dist)
img = cv2.imread('ChessUOledVGA.jpg', 1)
h, w = img.shape[:2] # get the size and the shape of the image h,w
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx, dist, (w, h), 1, (w, h))
print('newcameramtx', newcameramtx)
dst = cv2.undistort(img, mtx, dist, None, newcameramtx)
cv2.imwrite('result.jpg', dst)
当我运行这段代码时,我有一个图像没有正确无失真,并且有黑色边框,如图所示
这是原始图像
谁能帮帮我吗。
感谢黑色像素只是填充,图像始终是矩形,此2d数组中的每个像素都必须有一个值。Opencv似乎为这些像素指定了黑色。您的问题不是黑边框,实际的问题是您的失真没有正常工作。感谢@unlut的及时回复和解释。我明白你说的话。否则,你介意我请你看一下我的代码,并引导我找到它在我的不失真中的错误单词吗。感谢创建对象点时,您使用的行和列顺序错误。请尝试objp[:,:2]=np.mgrid[0:cbrow,0:cbcol].T.reformate(-1,2)我尝试了您建议的修改,效果良好。我没有注意到这个错误,非常感谢您的帮助hi@unlut,谢谢您的帮助。我还有一个问题。是什么使这段代码适用于一张棋盘而不适用于另一张棋盘。知道其他棋盘图片具有相同的尺寸。黑色像素只是填充,图像始终是矩形,此2d数组中的每个像素都必须有一个值。Opencv似乎为这些像素指定了黑色。您的问题不是黑边框,实际的问题是您的失真没有正常工作。感谢@unlut的及时回复和解释。我明白你说的话。否则,你介意我请你看一下我的代码,并引导我找到它在我的不失真中的错误单词吗。感谢创建对象点时,您使用的行和列顺序错误。请尝试objp[:,:2]=np.mgrid[0:cbrow,0:cbcol].T.reformate(-1,2)我尝试了您建议的修改,效果良好。我没有注意到这个错误,非常感谢您的帮助hi@unlut,谢谢您的帮助。我还有一个问题。是什么使这段代码适用于一张棋盘而不适用于另一张棋盘。知道其他棋盘图片具有相同的尺寸。