Example #1
0
    def collectCheckboardPoints(self):
        
        self.pointsArray1 = np.zeros((nimages, num_pts, 2)) 
        self.pointsArray2 = np.zeros((nimages, num_pts, 2)) 

        cv.NamedWindow("camera")
        cv.NamedWindow("camera2")
        
      
        i = 0
        while True :
            frame = cv.QueryFrame(self.video1)
        #     print type(frame)
        #     [rows1, cols] = cv.GetSize(frame)
            image = cv.CreateImage(cv.GetSize(frame), cv.IPL_DEPTH_8U, frame.nChannels)        
            cv.Copy(frame, image)
            cv.ShowImage("camera", frame)
            grayScaleFullImage = cv.CreateImage((image.width, image.height), 8, 1)
            cv.CvtColor(image, grayScaleFullImage, cv.CV_BGR2GRAY)
            
            frame2 = cv.QueryFrame(self.video2)
            image2 = cv.CreateImage(cv.GetSize(frame2), cv.IPL_DEPTH_8U, frame2.nChannels)        
            cv.Copy(frame2, image2)
            cv.ShowImage("camera2", frame2)
            grayScaleFullImage2 = cv.CreateImage((image2.width, image2.height), 8, 1)
            cv.CvtColor(image2, grayScaleFullImage2, cv.CV_BGR2GRAY)
             
             
            found, points = cv.FindChessboardCorners(grayScaleFullImage, dims, cv.CV_CALIB_CB_ADAPTIVE_THRESH)
            if found != 0:
                print "found chess board " + str(np.shape(points))
                cv.DrawChessboardCorners(image, dims, points, found)
                cv.ShowImage("win2", image)
                cv.WaitKey(2)
        #     else:
        #         print "no chess"
            found2, points2 = cv.FindChessboardCorners(grayScaleFullImage2, dims, cv.CV_CALIB_CB_ADAPTIVE_THRESH)
            if found2 != 0:
                print "found chess board2"
                cv.DrawChessboardCorners(image2, dims, points2, found2)
                cv.ShowImage("win3", image2)
                cv.WaitKey(2)
        
            if found and found2:
                
                print "entered here!!!!!"
               
                self.pointsArray1[i, :] = points
                self.pointsArray2[i, :] = points2
                i = i + 1
                
            if i == nimages:
                self.size = cv.GetSize(image)
                break
            
            if cv.WaitKey(10) == 27:
                break 
        
        cv.DestroyWindow("Camera 1")
        cv.DestroyWindow("Camera 2")
Example #2
0
def get_corners(mono, refine=False):
    (ok, corners) = cv.FindChessboardCorners(
        mono, (num_x_ints, num_y_ints),
        cv.CV_CALIB_CB_ADAPTIVE_THRESH | cv.CV_CALIB_CB_NORMALIZE_IMAGE)
    if refine and ok:
        corners = cv.FindCornerSubPix(
            mono, corners, (5, 5), (-1, -1),
            (cv.CV_TERMCRIT_EPS + cv.CV_TERMCRIT_ITER, 30, 0.1))
    return (ok, corners)
def _get_corners(img, board, refine=True):
    """
    Get corners for a particular chessboard for an image
    """
    w, h = cv.GetSize(img)
    mono = cv.CreateMat(h, w, cv.CV_8UC1)
    cv.CvtColor(img, mono, cv.CV_BGR2GRAY)
    (ok, corners) = cv.FindChessboardCorners(
        mono, (board.n_cols, board.n_rows), cv.CV_CALIB_CB_ADAPTIVE_THRESH
        | cv.CV_CALIB_CB_NORMALIZE_IMAGE | cv2.CALIB_CB_FAST_CHECK)

    # If any corners are within BORDER pixels of the screen edge, reject the detection by setting ok to false
    # NOTE: This may cause problems with very low-resolution cameras, where 8 pixels is a non-negligible fraction
    # of the image size. See http://answers.ros.org/question/3155/how-can-i-calibrate-low-resolution-cameras
    BORDER = 8
    if not all([(BORDER < x < (w - BORDER)) and (BORDER < y < (h - BORDER))
                for (x, y) in corners]):
        ok = False

    if refine and ok:
        # Use a radius of half the minimum distance between corners. This should be large enough to snap to the
        # correct corner, but not so large as to include a wrong corner in the search window.
        min_distance = float("inf")
        for row in range(board.n_rows):
            for col in range(board.n_cols - 1):
                index = row * board.n_rows + col
                min_distance = min(min_distance,
                                   _pdist(corners[index], corners[index + 1]))
        for row in range(board.n_rows - 1):
            for col in range(board.n_cols):
                index = row * board.n_rows + col
                min_distance = min(
                    min_distance,
                    _pdist(corners[index], corners[index + board.n_cols]))
        radius = int(math.ceil(min_distance * 0.5))
        corners = cv.FindCornerSubPix(
            mono, corners, (radius, radius), (-1, -1),
            (cv.CV_TERMCRIT_EPS + cv.CV_TERMCRIT_ITER, 30, 0.1))

    return (ok, corners)
Example #4
0
if __name__ == "__main__":
    cv.NamedWindow("win")
    if len(sys.argv) > 1:
        filename = sys.argv[1]
        im = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_GRAYSCALE)
        im3 = cv.LoadImage(filename, cv.CV_LOAD_IMAGE_COLOR)
    else:
        try:  # try opening local copy of image
            fileName = '../cpp/left01.jpg'
            im = cv.LoadImageM(fileName, False)
            im3 = cv.LoadImageM(fileName, True)
        except:  # if local copy cannot be opened, try downloading it
            url = 'https://raw.github.com/opencv/opencv/master/samples/cpp/left01.jpg'
            filedata = urllib2.urlopen(url).read()
            imagefiledata = cv.CreateMatHeader(1, len(filedata), cv.CV_8UC1)
            cv.SetData(imagefiledata, filedata, len(filedata))
            im = cv.DecodeImageM(imagefiledata, cv.CV_LOAD_IMAGE_GRAYSCALE)
            im3 = cv.DecodeImageM(imagefiledata, cv.CV_LOAD_IMAGE_COLOR)

    chessboard_dim = (9, 6)

    found_all, corners = cv.FindChessboardCorners(im, chessboard_dim)
    print found_all, len(corners)

    cv.DrawChessboardCorners(im3, chessboard_dim, corners, found_all)

    cv.ShowImage("win", im3)
    cv.WaitKey()
    cv.DestroyAllWindows()