mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.7 KiB
61 lines
1.7 KiB
#!/usr/bin/python |
|
|
|
import urllib2 |
|
import cv |
|
from random import randint |
|
|
|
def roundxy(pt): |
|
return (cv.Round(pt[0]), cv.Round(pt[1])) |
|
|
|
def draw_common(points): |
|
success, center, radius = cv.MinEnclosingCircle(points) |
|
if success: |
|
cv.Circle(img, roundxy(center), cv.Round(radius), cv.CV_RGB(255, 255, 0), 1, cv. CV_AA, 0) |
|
|
|
box = cv.MinAreaRect2(points) |
|
box_vtx = [roundxy(p) for p in cv.BoxPoints(box)] |
|
cv.PolyLine(img, [box_vtx], 1, cv.CV_RGB(0, 255, 255), 1, cv. CV_AA) |
|
|
|
def minarea_array(img, count): |
|
pointMat = cv.CreateMat(count, 1, cv.CV_32SC2) |
|
for i in range(count): |
|
pointMat[i, 0] = (randint(img.width/4, img.width*3/4), |
|
randint(img.height/4, img.height*3/4)) |
|
|
|
cv.Zero(img) |
|
|
|
for i in range(count): |
|
cv.Circle(img, roundxy(pointMat[i, 0]), 2, cv.CV_RGB(255, 0, 0), cv.CV_FILLED, cv. CV_AA, 0) |
|
|
|
draw_common(pointMat) |
|
|
|
def minarea_seq(img, count, storage): |
|
points = [(randint(img.width/4, img.width*3/4), randint(img.height/4, img.height*3/4)) for i in range(count)] |
|
cv.Zero(img) |
|
|
|
for p in points: |
|
cv.Circle(img, roundxy(p), 2, cv.CV_RGB(255, 0, 0), cv.CV_FILLED, cv. CV_AA, 0) |
|
|
|
draw_common(points) |
|
|
|
if __name__ == "__main__": |
|
img = cv.CreateImage((500, 500), 8, 3) |
|
storage = cv.CreateMemStorage() |
|
|
|
cv.NamedWindow("rect & circle", 1) |
|
|
|
use_seq = True |
|
|
|
while True: |
|
count = randint(1, 100) |
|
if use_seq: |
|
minarea_seq(img, count, storage) |
|
else: |
|
minarea_array(img, count) |
|
|
|
cv.ShowImage("rect & circle", img) |
|
key = cv.WaitKey() % 0x100 |
|
if key in [27, ord('q'), ord('Q')]: |
|
break |
|
|
|
use_seq = not use_seq
|
|
|