diff --git a/.gitignore b/.gitignore index 47000fd..46cb50d 100644 --- a/.gitignore +++ b/.gitignore @@ -16,4 +16,4 @@ ext/opencv/test.txt pkg/ log.txt *.avi -examples/rotated-boxes-with-detected-bounding-rectangles.jpg +examples/contours/rotated-boxes-with-detected-bounding-rectangles.jpg diff --git a/examples/bounding-box-detect-canny-no-gui.rb b/examples/contours/bounding-box-detect-canny.rb similarity index 56% rename from examples/bounding-box-detect-canny-no-gui.rb rename to examples/contours/bounding-box-detect-canny.rb index b61158b..a475352 100755 --- a/examples/bounding-box-detect-canny-no-gui.rb +++ b/examples/contours/bounding-box-detect-canny.rb @@ -30,15 +30,35 @@ contour = canny.find_contours(:mode => OpenCV::CV_RETR_LIST, :method => OpenCV:: while contour # No "holes" please (aka. internal contours) unless contour.hole? + + puts '-' * 80 + puts "BOUNDING RECT FOUND" + puts '-' * 80 + + # You can detect the "bounding rectangle" which is always oriented horizontally and vertically box = contour.bounding_rect - puts "found external contour from #{box.top_left.x},#{box.top_left.y} to #{box.bottom_right.x},#{box.bottom_right.y}" + puts "found external contour with bounding rectangle from #{box.top_left.x},#{box.top_left.y} to #{box.bottom_right.x},#{box.bottom_right.y}" + + # The contour area can be computed: + puts "that contour encloses an area of #{contour.contour_area} square pixels" + + # .. as can be the length of the contour + puts "that contour is #{contour.arc_length} pixels long " # Draw that bounding rectangle cvmat.rectangle! box.top_left, box.bottom_right, :color => OpenCV::CvColor::Black + + # You can also detect the "minimal rectangle" which has an angle, width, height and center coordinates + # and is not neccessarily horizonally or vertically aligned. + # The corner of the rectangle with the lowest y and x position is the achor (see imagehere: http://bit.ly/lT1XvB) + # The zero angle position is always straight up. + # Positive angle values are clockwise and negative values counter clockwise (so -60 means 60 degree counter clockwise) + box = contour.min_area_rect + puts "found minimal rectangle with its center at (#{box.center.x.round},#{box.center.y.round}), width of #{box.size.width.round}px, height of #{box.size.height.round} and an angle of #{box.angle.round} degree" end contour = contour.h_next end # And save the image -puts "Saving image with bounding rectangles" +puts "\nSaving image with bounding rectangles" cvmat.save_image("rotated-boxes-with-detected-bounding-rectangles.jpg") diff --git a/examples/contours/rotated-boxes.jpg b/examples/contours/rotated-boxes.jpg new file mode 100644 index 0000000..cf3a2e6 Binary files /dev/null and b/examples/contours/rotated-boxes.jpg differ diff --git a/examples/rotated-boxes.jpg b/examples/rotated-boxes.jpg deleted file mode 100644 index 344210b..0000000 Binary files a/examples/rotated-boxes.jpg and /dev/null differ