Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从未失真图像中删除黑色边框_Python_Opencv_Computer Vision_Distortion - Fatal编程技术网

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,谢谢您的帮助。我还有一个问题。是什么使这段代码适用于一张棋盘而不适用于另一张棋盘。知道其他棋盘图片具有相同的尺寸。