Ask Your Question

Shiki's profile - activity

2015-07-07 15:43:39 -0600 commented question How Does Contour Extraction Work?

Do you have any suggestions for approximating 3D shapes? I've looked into PCL as well, but it didn't seem like it could create a 3D representation.

2015-07-07 11:32:46 -0600 commented question How Does Contour Extraction Work?

Sorry, added code for reference.

2015-07-07 11:22:36 -0600 received badge  Editor (source)
2015-07-07 01:34:13 -0600 asked a question How Does Contour Extraction Work?

I've been modifying to be able to detect contours of 3D objects. My goal is for it to extract the shapes of 3D objects (i.e. get the squares of a cube). However, whenever I run my code on the image below, drawing the contours gives me a hexagon and a green Y. Is there any way to modify this so that for each contour, I get the polygon of a square/ shape? Thanks!

image description

image description

#!/usr/bin/env python                                 

Usage:                                          [<image source>]

  Converts visual objects into basic shapes.

import cv2                                            
import numpy as np                                    

# relative module
import video                                          

# built-in module                                     
import sys

#from bulbs.neo4jserver import Graph
def findShapes(img):
    img = cv2.GaussianBlur(img, (1, 1), 0)
    cv2.imshow("test", img)
    shapeList = []

    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = cv2.bilateralFilter(gray, 11, 17, 17)
    edged = cv2.Canny(gray, 0, 200)
    cv2.imshow("test", edged)
    contours, hierarchy = cv2.findContours(edged, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours:
        cnt_len = cv2.arcLength(cnt, True)
        cnt = cv2.approxPolyDP(cnt, 0.01*cnt_len, True)
    keyVertices = []
    for i in shapeList:
        print("Shape Coordinates:",  [pts for pts in i])
    return shapeList def removeDuplicates(contours):

if __name__ == '__main__':
    from glob import glob
    for fn in glob('../data/perfectcube/png'):
        img = cv2.imread(fn)
        squares = findShapes(img)
        cv2.drawContours( img, squares, 0, (0, 255, 0), 3 )
        cv2.drawContours( img, squares, 1, (255, 0, 0), 3 )
        cv2.drawContours( img, squares, 2, (0, 0, 255), 3 )
        cv2.imshow('squares', img)
        ch = 0xFF & cv2.waitKey()
        if ch == 27: