Example #1
0
def show_video(fileorid):
    cv.namedWindow(str(fileorid), cv.CV_WINDOW_AUTOSIZE)
    video = cv.VideoCapture(fileorid) 
    img = cv.Mat() 
    img2 = cv.Mat()    
    while video.grab():     
        video.retrieve(img, 0) 
        #cv.cvtColor(img, img2, cv.CV_GBR2RGB)
        cv.imshow(str(fileorid), img)
        cv.waitKey(5)
Example #2
0
def show_video(fileorid):
    cv.namedWindow(str(fileorid), cv.CV_WINDOW_AUTOSIZE)
    video = cv.VideoCapture(fileorid) 
    img = cv.Mat() 
    img2 = cv.Mat()    
    while video.grab():     
        video.retrieve(img, 0) 
        #cv.cvtColor(img, img2, cv.CV_GBR2RGB)
        cv.imshow(str(fileorid), img)
        cv.waitKey(5)
Example #3
0
            show_img = cv.Mat()
            cv.cvtColor(edge_img, show_img, cv.CV_GRAY2BGR)
        else:
            show_img = self.img.clone()
        4  ###
        # 线段检测
        theta = self.theta / 180.0 * np.pi
        lines = cv.HoughLinesP(edge_img, self.rho, theta, self.hough_th,
                               self.minlen, self.maxgap)
        for line in lines:
            cv.line(show_img, cv.asPoint(line[:2]), cv.asPoint(line[2:]),
                    cv.CV_RGB(255, 0, 0), 2)
        5  ###
        # 圆形检测
        circles = cv.HoughCircles(self.img_smooth,
                                  3,
                                  self.dp,
                                  self.mindist,
                                  param1=self.param1,
                                  param2=self.param2)

        for circle in circles:
            cv.circle(show_img, cv.Point(int(circle[0]), int(circle[1])),
                      int(circle[2]), cv.CV_RGB(0, 255, 0), 2)

        cv.imshow("Hough Demo", show_img)


cv.namedWindow("Hough Demo")
demo = HoughDemo()
demo.configure_traits()
Example #4
0
    def redraw(self):
        def func(x, y):
            return eval(self.surf_func, globals(), locals())

        try:
            self.map1[:], self.map2[:] = make_surf_map(func, self.range,
                                                       self.w, self.h,
                                                       self.view_height)
        except SyntaxError:
            return
        if self.grid:
            img = self.gridimg
        else:
            img = self.img
        cv.remap(img, self.dstimg, self.map1, self.map2, cv.INTER_LINEAR)
        cv.imshow("Remap Demo", self.dstimg)

    def make_grid_img(self):
        img = self.img.clone()
        for i in range(0, self.w, 30):
            cv.line(img, cv.Point(i, 0), cv.Point(i, self.h),
                    cv.CV_RGB(0, 0, 0), 1)
        for i in range(0, self.h, 30):
            cv.line(img, cv.Point(0, i), cv.Point(self.w, i),
                    cv.CV_RGB(0, 0, 0), 1)
        return img


cv.namedWindow("Remap Demo", cv.CV_WINDOW_AUTOSIZE)
demo = RemapDemo()
demo.configure_traits()
Example #5
0

class PerspectiveDemo(HasTraits):
    src = Array(shape=(4, 2), dtype=np.float32)
    dst = Array(shape=(4, 2), dtype=np.float32)

    View = View(Item("dst", label=u"变换后坐标"), title=u"Perspective Demo控制面板")

    def __init__(self, **traits):
        super(PerspectiveDemo, self).__init__(**traits)
        self.img = cv.imread("lena.jpg")
        w = self.img.size().width
        h = self.img.size().height
        self.src = np.array([[0, 0], [w, 0], [0, h], [w, h]], dtype=np.float32)
        self.dst = np.array([[0, 0], [w, 0], [0, h], [w, h]], dtype=np.float32)
        self.on_trait_change(self.redraw, "src,dst")
        self.redraw()

    def redraw(self):
        src = cv.asvector_Point2f(self.src)
        dst = cv.asvector_Point2f(self.dst)
        m = cv.getPerspectiveTransform(src, dst)
        print m
        img2 = cv.Mat()
        cv.warpPerspective(self.img, img2, m, self.img.size())
        cv.imshow("Perspective Demo", img2)


cv.namedWindow("Perspective Demo")
demo = PerspectiveDemo()
demo.configure_traits()
    m = Array(np.float, (2, 3))
    size = Array(np.int, (1, 2))

    view = View(Item("m", label="变换矩阵"),
                Item("size", label="图像大小"),
                title="Affine Demo控制面板")

    def __init__(self, **traits):
        super(AffineDemo, self).__init__(**traits)
        self.img = cv.imread("lena.jpg")
        self.m = np.array([[0.5, -0.3, 100], [0.3, 0.5, 0]])
        size = self.img.size()
        self.on_trait_change(self.redraw, "m,size")
        self.size = np.array([[size.width, size.height]])

    def redraw(self):
        M = cv.asMat(self.m, force_single_channel=True)
        size = cv.Size(int(self.size[0, 0]), int(self.size[0, 1]))
        img2 = cv.Mat()
        if size.width > 0 and size.height > 0:
            cv.warpAffine(self.img,
                          img2,
                          M,
                          size,
                          borderValue=cv.CV_RGB(255, 255, 255))
            cv.imshow("Affine Demo", img2)


cv.namedWindow("Affine Demo")
demo = AffineDemo()
demo.configure_traits()
                Item("iter", label=u"迭代次数"),
                title=u"Morphology Demo控制面板")

    def __init__(self, *args, **kwargs):
        super(MorphologyDemo, self).__init__(*args, **kwargs)
        self.structing_element = np.ones((3, 3), dtype=np.uint8)
        self.img = cv.imread("lena.jpg")
        self.on_trait_change(self.redraw,
                             "structing_element,process_type,iter")
        self.redraw()

    def redraw(self):
        img2 = cv.Mat()
        element = cv.asMat(self.structing_element, force_single_channel=True)
        if self.process_type.startswith("MORPH_"):
            type = getattr(cv, self.process_type)
            cv.morphologyEx(self.img,
                            img2,
                            type,
                            element,
                            iterations=self.iter)
        else:
            func = getattr(cv, self.process_type)
            func(self.img, img2, element, iterations=self.iter)

        cv.imshow("Morphology Demo", img2)


cv.namedWindow("Morphology Demo", cv.CV_WINDOW_AUTOSIZE)
demo = MorphologyDemo()
demo.configure_traits()
class PerspectiveDemo(HasTraits):
    src = Array(shape=(4,2), dtype=np.float32)
    dst = Array(shape=(4,2), dtype=np.float32)
    
    View = View(
        Item("dst", label=u"变换后坐标"),
        title = u"Perspective Demo控制面板"
    )
    
    def __init__(self, **traits):
        super(PerspectiveDemo, self).__init__(**traits)
        self.img = cv.imread("lena.jpg")
        w = self.img.size().width
        h = self.img.size().height
        self.src = np.array([[0,0],[w,0],[0,h],[w,h]],dtype=np.float32)
        self.dst = np.array([[0,0],[w,0],[0,h],[w,h]],dtype=np.float32)
        self.on_trait_change(self.redraw, "src,dst")
        self.redraw()
        
    def redraw(self):
        src = cv.asvector_Point2f(self.src)
        dst = cv.asvector_Point2f(self.dst)
        m = cv.getPerspectiveTransform(src, dst)
        print m
        img2 = cv.Mat()
        cv.warpPerspective(self.img, img2, m, self.img.size())
        cv.imshow("Perspective Demo", img2)

cv.namedWindow("Perspective Demo")
demo = PerspectiveDemo()
demo.configure_traits()
if __name__ == '__main__':
    winName = 'PyOpenCV fun'

    cascade = pyopencv.CascadeClassifier()
    cascade.load("haarcascades/haarcascade_mcs_eyepair_big.xml")

    fallbackCascade = pyopencv.CascadeClassifier()
    fallbackCascade.load("haarcascades/haarcascade_mcs_eyepair_small.xml")

    glasses = Image.open('darkkamina.png')
    glasses.load()

    capture = pyopencv.VideoCapture()
    frame = pyopencv.Mat()
    capture.open(1)
    pyopencv.namedWindow(winName, pyopencv.CV_WINDOW_AUTOSIZE&1)

    if capture.isOpened():
        while True:
            capture.retrieve(frame)
            if frame.empty():
                break

            eyes = detect(frame, cascade, fallbackCascade)
            final = draw(frame, eyes, glasses)

            pyopencv.imshow(winName, final)

            if pyopencv.waitKey(25) >= 0:
                break
def new_video_writer(path, fps, size, use_color=False):
    print cv.CV_FOURCC('x', '2', '6', '4')
    return cv.VideoWriter(path,
                          # cv.CV_FOURCC('D', 'I', 'V', 'X'),
                          cv.CV_FOURCC('x', '2', '6', '4'),
#                          cv.CV_FOURCC('I', 'Y', 'U', 'V'),
#                          cv.CV_FOURCC('F', 'L', 'V', '1'),
                          fps, cv.Size(*size), use_color)

def save_image(src, path):
    cv.imwrite(path, src)


if __name__ == '__main__':
    cv.namedWindow('foo', 1)
#    src = load_image('/Users/ross/Programming/demo/lena.jpg', swap=True)
    src = load_image('/Users/ross/Programming/demo/lena.jpg', swap=True)
#    draw_point(src, (100, 100))
    gsrc = grayspace(src)
    tsrc = threshold(gsrc, 100)
    csrc = colorspace(tsrc)
#    gsrc = src
#    conts, hierarchy = contour(tsrc)
# #
#    print get_polygons(conts)

    draw_lines(csrc, [[(0, 0), (100, 100)]])
    cv.imshow('foo', csrc)
    c = cv.waitKey(0)
#    if(c & 255 == 27):
        cv.imshow("Watershed Demo", img3)


# 区域的颜色列表
marks_color = [
    cv.CV_RGB(0, 0, 0),
    cv.CV_RGB(255, 0, 0),
    cv.CV_RGB(0, 255, 0),
    cv.CV_RGB(0, 0, 255),
    cv.CV_RGB(255, 255, 0),
    cv.CV_RGB(0, 255, 255),
    cv.CV_RGB(255, 0, 255),
    cv.CV_RGB(255, 255, 255)
]

# 将颜色列表转换为调色板数组,只取前三个通道的值
palette = np.array([c.ndarray[:-1] for c in marks_color], dtype=np.uint8)

seed = 1  # 从序号1开始设置区域颜色
mask_opacity = 0.5  # 绘制区域颜色的透明度

img = cv.imread("fruits.jpg")
img2 = img.clone()  # 绘制初始区域用
markers = cv.Mat(img2.size(), cv.CV_32S)  # 储存初始区域的数组
markers[:] = 0

cv.namedWindow("Watershed Demo")
cv.imshow("Watershed Demo", img2)
cv.setMouseCallback("Watershed Demo", mouse_call_back)
cv.waitKey(0)
# -*- coding: utf-8 -*-
import pyopencv as cv
import numpy as np

img = cv.imread("lena.jpg")
size = img.size()
w, h = size
img2 = cv.Mat()
map1, map2 = np.meshgrid(
    np.linspace(0,w*2,w).astype(np.float32),
    np.linspace(0,h*2,h).astype(np.float32),
)
map1 = cv.asMat(map1)
map2 = cv.asMat(map2)
cv.remap(img, img2, map1, map2, cv.INTER_LINEAR)

cv.namedWindow( "Remap Resize", cv.CV_WINDOW_AUTOSIZE )
cv.imshow("Remap Resize", img2)
cv.waitKey(0)

        # 同时显示两幅图像
        w = self.img1.size().width
        h = self.img1.size().height
        show_img = cv.Mat(cv.Size(w*2, h), cv.CV_8UC3)
        for i in xrange(3):
            show_img[:,:w,i] = self.img1[:]
            show_img[:,w:,i] = self.img2[:]
        
        # 绘制特征线条
        if self.draw_circle:
            self.draw_keypoints(show_img, self.keypoints1, 0)
            self.draw_keypoints(show_img, self.keypoints2, w)
        
        
        # 绘制直线连接距离小于阈值的两个特征点
        for idx1 in np.where(self.mindist < self.max_distance)[0]:  
            idx2 = self.idx_mindist[idx1]
            pos1 = self.keypoints1[int(idx1)].pt  
            pos2 = self.keypoints2[int(idx2)].pt
            
            p1 = cv.Point(int(pos1.x), int(pos1.y)) 
            p2 = cv.Point(int(pos2.x)+w, int(pos2.y)) 
            cv.line(show_img, p1, p2, cv.CV_RGB(0,255,255), lineType=16)
        
        
        cv.imshow("SURF Demo",show_img)
        
cv.namedWindow("SURF Demo")   
demo = SURFDemo()     
demo.configure_traits()
        # 计算结果图
        if self.show_canny: 
            show_img = cv.Mat()
            cv.cvtColor(edge_img, show_img, cv.CV_GRAY2BGR)
        else:
            show_img = self.img.clone()
        4### 
        # 线段检测   
        theta = self.theta / 180.0 * np.pi
        lines = cv.HoughLinesP(edge_img,  
            self.rho, theta, self.hough_th, self.minlen, self.maxgap)
        for line in lines: 
            cv.line(show_img, 
                cv.asPoint(line[:2]),  
                cv.asPoint(line[2:]),
                cv.CV_RGB(255, 0, 0), 2)
        5###
        # 圆形检测
        circles = cv.HoughCircles(self.img_smooth, 3,  
            self.dp, self.mindist, param1=self.param1, param2=self.param2)
            
        for circle in circles: 
            cv.circle(show_img, 
                cv.Point(int(circle[0]), int(circle[1])), int(circle[2]), 
                cv.CV_RGB(0, 255, 0), 2)
        
        cv.imshow("Hough Demo", show_img)
                    
cv.namedWindow("Hough Demo")     
demo = HoughDemo()     
demo.configure_traits()
    iter = Int(1)
    
    view = View(
        Item("structing_element", label=u"结构元素"),
        Item("process_type", label=u"处理类型"),
        Item("iter", label=u"迭代次数"),
        title = u"Morphology Demo控制面板"
    )    
    
    def __init__(self, *args, **kwargs):
        super(MorphologyDemo, self).__init__(*args, **kwargs)
        self.structing_element = np.ones((3,3), dtype=np.uint8)
        self.img = cv.imread("lena.jpg")
        self.on_trait_change(self.redraw, "structing_element,process_type,iter")
        self.redraw()
        
    def redraw(self):
        img2 = cv.Mat()
        element = cv.asMat(self.structing_element, force_single_channel=True)
        if self.process_type.startswith("MORPH_"):
            type = getattr(cv, self.process_type)
            cv.morphologyEx(self.img, img2, type, element, iterations=self.iter)
        else:
            func = getattr(cv, self.process_type)
            func(self.img, img2, element, iterations=self.iter)
            
        cv.imshow("Morphology Demo", img2)
        
cv.namedWindow( "Morphology Demo", cv.CV_WINDOW_AUTOSIZE )
demo = MorphologyDemo()
demo.configure_traits()
Example #16
0
        Z = 1./(h[2,0]*x + h[2,1]*y + h[2,2])
        X = (h[0,0]*x + h[0,1]*y + h[0,2])*Z
        Y = (h[1,0]*x + h[1,1]*y + h[1,2])*Z
        dst_corners[i] = cv.Point(int(X), int(Y))

    return 1

if __name__ == '__main__':
    if len(sys.argv) == 3:
        object_filename = sys.argv[1]
        scene_filename = sys.argv[2]
    else:
        object_filename = "box.png"
        scene_filename = "box_in_scene.png"

    cv.namedWindow("Object", 1)
    cv.namedWindow("Object Correspond", 1)

    colors = [
        cv.Scalar(0,0,255),
        cv.Scalar(0,128,255),
        cv.Scalar(0,255,255),
        cv.Scalar(0,255,0),
        cv.Scalar(255,128,0),
        cv.Scalar(255,255,0),
        cv.Scalar(255,0,0),
        cv.Scalar(255,0,255),
        cv.Scalar(255,255,255),
    ]

    # read the two images
Example #17
0
    def redraw(self):
        # 同时显示两幅图像
        w = self.img1.size().width
        h = self.img1.size().height
        show_img = cv.Mat(cv.Size(w * 2, h), cv.CV_8UC3)
        for i in range(3):
            show_img[:, :w, i] = self.img1[:]
            show_img[:, w:, i] = self.img2[:]

        # 绘制特征线条
        if self.draw_circle:
            self.draw_keypoints(show_img, self.keypoints1, 0)
            self.draw_keypoints(show_img, self.keypoints2, w)

        # 绘制直线连接距离小于阈值的两个特征点
        for idx1 in np.where(self.mindist < self.max_distance)[0]:
            idx2 = self.idx_mindist[idx1]
            pos1 = self.keypoints1[int(idx1)].pt
            pos2 = self.keypoints2[int(idx2)].pt

            p1 = cv.Point(int(pos1.x), int(pos1.y))
            p2 = cv.Point(int(pos2.x) + w, int(pos2.y))
            cv.line(show_img, p1, p2, cv.CV_RGB(0, 255, 255), lineType=16)

        cv.imshow("SURF Demo", show_img)


cv.namedWindow("SURF Demo")
demo = SURFDemo()
demo.configure_traits()
Example #18
0
    cv.erode(image, dest, element)
    cv.imshow("Opening&Closing window",dest);
def Erosion(pos, user_data):
    element = cv.asMat(np.ones((pos*2+1, pos*2+1), 'uint8'), True)
    cv.erode(src, dest, element)
    cv.imshow("Erosion&Dilation window",dest);
def Dilation(pos, user_data):
    element = cv.asMat(np.ones((pos*2+1, pos*2+1), 'uint8'), True)
    cv.dilate(src, dest, element)
    cv.imshow("Erosion&Dilation window",dest);

if __name__ == "__main__":
    filename = "baboon.jpg"
    if len(sys.argv)==2:
        filename = sys.argv[1]
    src = cv.imread(filename,1)
    if src.empty():
        sys.exit(-1)
    image = src.clone()
    dest = src.clone()
    cv.namedWindow("Opening&Closing window",1)
    cv.namedWindow("Erosion&Dilation window",1)
    cv.imshow("Opening&Closing window",src)
    cv.imshow("Erosion&Dilation window",src)
    cv.createTrackbar("Open","Opening&Closing window",0,10,Opening)
    cv.createTrackbar("Close","Opening&Closing window",0,10,Closing)
    cv.createTrackbar("Dilate","Erosion&Dilation window",0,10,Dilation)
    cv.createTrackbar("Erode","Erosion&Dilation window",0,10,Erosion)
    cv.waitKey(0)
    
        self.gridimg = self.make_grid_img()
        self.on_trait_change(self.redraw, "surf_func,range,view_height,grid")

    def redraw(self):
        def func(x, y):
            return eval(self.surf_func, globals(), locals())

        try:
            self.map1[:], self.map2[:] = make_surf_map(func, self.range, self.w, self.h, self.view_height)
        except SyntaxError:
            return
        if self.grid:
            img = self.gridimg
        else:
            img = self.img
        cv.remap(img, self.dstimg, self.map1, self.map2, cv.INTER_LINEAR)
        cv.imshow("Remap Demo", self.dstimg)

    def make_grid_img(self):
        img = self.img.clone()
        for i in xrange(0, self.w, 30):
            cv.line(img, cv.Point(i, 0), cv.Point(i, self.h), cv.CV_RGB(0, 0, 0), 1)
        for i in xrange(0, self.h, 30):
            cv.line(img, cv.Point(0, i), cv.Point(self.w, i), cv.CV_RGB(0, 0, 0), 1)
        return img


cv.namedWindow("Remap Demo", cv.CV_WINDOW_AUTOSIZE)
demo = RemapDemo()
demo.configure_traits()
        cv.imshow("Watershed Demo", img3)
        

        

        
# 区域的颜色列表
marks_color = [ 
    cv.CV_RGB(0, 0, 0)    ,cv.CV_RGB(255, 0, 0),
    cv.CV_RGB(0, 255, 0)  ,cv.CV_RGB(0, 0, 255),
    cv.CV_RGB(255, 255, 0),cv.CV_RGB(0, 255, 255),
    cv.CV_RGB(255, 0, 255),cv.CV_RGB(255, 255, 255)
]

# 将颜色列表转换为调色板数组,只取前三个通道的值
palette = np.array([c.ndarray[:-1] for c in marks_color], dtype=np.uint8) 

seed = 1 # 从序号1开始设置区域颜色
mask_opacity = 0.5 # 绘制区域颜色的透明度


img = cv.imread("fruits.jpg")
img2 = img.clone() # 绘制初始区域用
markers = cv.Mat(img2.size(), cv.CV_32S) # 储存初始区域的数组
markers[:] = 0

cv.namedWindow("Watershed Demo")
cv.imshow("Watershed Demo", img2)
cv.setMouseCallback("Watershed Demo", mouse_call_back) 
cv.waitKey(0)
        self.plot = Plot(data, padding=10)
        line = self.plot.plot(("x", "y"))[0]
        self.select_tool = RangeSelection(line, left_button_selects=True)
        line.tools.append(self.select_tool)
        self.select_tool.on_trait_change(self._selection_changed, "selection")
        line.overlays.append(RangeSelectionOverlay(component=line))

        cv.imshow("Hist Demo", self.img)

        self.timer = Timer(50, self.on_timer)

    def _selection_changed(self):
        if self.select_tool.selection != None:
            self.need_update = True

    def on_timer(self):
        if self.need_update:
            x0, x1 = self.select_tool.selection
            self.img2[:] = self.img[:]
            np.clip(self.img2[:], x0, x1, out=self.img2[:])
            self.img2[:] -= x0
            self.img2[:] *= 256.0 / (x1 - x0)
            cv.imshow("Hist Demo", self.img2)
            self.need_update = False


cv.namedWindow("Hist Demo", cv.CV_WINDOW_AUTOSIZE)
if __name__ == "__main__":
    p = HistDemo()
    p.configure_traits()
# -*- coding: utf-8 -*-
import pyopencv as cv
import sys

try:
    filename = sys.argv[1]
except:
    filename = "lena.jpg"
img = cv.imread( filename )
cv.namedWindow("demo1")
cv.imshow("demo1", img)
cv.waitKey(0)
from enthought.traits.ui.api import View, Item

class MeanShiftDemo(HasTraits):
    spatial_radius = Range(1, 40, 20)
    color_radius = Range(1, 100, 40)
    max_level = Range(1, 4, 2)
    do_button = Button(u"计算")
    
    view = View(
        Item("spatial_radius", label=u"空间半径"),
        Item("color_radius", label=u"颜色半径"),
        Item("max_level", label=u"最大层数"),
        Item("do_button", show_label=False),
        title = u"Mean Shift Demo控制面板"
    )    
    
    def __init__(self, *args, **kwargs):
        super(MeanShiftDemo, self).__init__(*args, **kwargs)
        self.img = cv.imread("fruits.jpg")
        self.img2 = self.img.clone()
        self.on_trait_change(self.redraw, "do_button")
        self.redraw()
        
    def redraw(self):
        cv.pyrMeanShiftFiltering(self.img, self.img2, 
            self.spatial_radius, self.color_radius, self.max_level)
        cv.imshow("Mean Shift Demo", self.img2)

cv.namedWindow("Mean Shift Demo")     
demo = MeanShiftDemo()     
demo.configure_traits() 
Example #24
0
# -*- coding: utf-8 -*-
import pyopencv as cv
import sys

try:
    filename = sys.argv[1]
except:
    filename = "lena.jpg"
img = cv.imread(filename)
cv.namedWindow("demo1")
cv.imshow("demo1", img)
cv.waitKey(0)
from enthought.traits.ui.api import View, Item

class AffineDemo(HasTraits):
    m = Array(np.float, (2,3))
    size = Array(np.int, (1,2))
    
    view = View(
        Item("m", label=u"变换矩阵"),
        Item("size", label=u"图像大小"),
        title = u"Affine Demo控制面板"
    )    
    
    def __init__(self, **traits):
        super(AffineDemo, self).__init__(**traits)
        self.img = cv.imread("lena.jpg")
        self.m = np.array([[0.5,-0.3,100],[0.3,0.5,0]])
        size = self.img.size()
        self.on_trait_change(self.redraw, "m,size")
        self.size = np.array([[size.width, size.height]])
       
    def redraw(self):
        M = cv.asMat(self.m, force_single_channel=True)
        size = cv.Size(int(self.size[0,0]), int(self.size[0,1]))
        img2 = cv.Mat()
        if size.width > 0 and size.height > 0:
            cv.warpAffine(self.img, img2, M, size, borderValue=cv.CV_RGB(255,255,255))
            cv.imshow("Affine Demo", img2)

cv.namedWindow("Affine Demo")
demo = AffineDemo()
demo.configure_traits()
import pyopencv as cv
import numpy as np
from enthought.traits.api import HasTraits, Array, Float
from enthought.traits.ui.api import View, Item

class FilterDemo(HasTraits):
    kernel = Array(shape=(3,3),dtype=np.float)
    scale = Float
    
    view = View(
        Item("kernel", label=u"卷积核"),
        Item("scale", label=u"乘积因子"),
        title = u"Filter Demo控制面板"
    )    
    
    def __init__(self, *args, **kwargs):
        super(FilterDemo, self).__init__(*args, **kwargs)
        self.kernel = np.ones((3,3))
        self.img = cv.imread("lena.jpg")
        self.on_trait_change(self.redraw, "kernel,scale")
        self.scale = 1.0 / 9.0
        
    def redraw(self):
        img2 = cv.Mat()
        kernel = cv.asMat(self.kernel*self.scale, force_single_channel=True)
        cv.filter2D(self.img, img2, -1, kernel)
        cv.imshow("Filter Demo", img2)
        
cv.namedWindow( "Filter Demo", cv.CV_WINDOW_AUTOSIZE )
demo = FilterDemo()
demo.configure_traits()    
Example #27
0
import pyopencv as cv
import numpy as np
from enthought.traits.api import HasTraits, Array, Float
from enthought.traits.ui.api import View, Item


class FilterDemo(HasTraits):
    kernel = Array(shape=(3, 3), dtype=np.float)
    scale = Float

    view = View(Item("kernel", label=u"卷积核"),
                Item("scale", label=u"乘积因子"),
                title=u"Filter Demo控制面板")

    def __init__(self, *args, **kwargs):
        super(FilterDemo, self).__init__(*args, **kwargs)
        self.kernel = np.ones((3, 3))
        self.img = cv.imread("lena.jpg")
        self.on_trait_change(self.redraw, "kernel,scale")
        self.scale = 1.0 / 9.0

    def redraw(self):
        img2 = cv.Mat()
        kernel = cv.asMat(self.kernel * self.scale, force_single_channel=True)
        cv.filter2D(self.img, img2, -1, kernel)
        cv.imshow("Filter Demo", img2)


cv.namedWindow("Filter Demo", cv.CV_WINDOW_AUTOSIZE)
demo = FilterDemo()
demo.configure_traits()
Example #28
0
        X = (h[0, 0] * x + h[0, 1] * y + h[0, 2]) * Z
        Y = (h[1, 0] * x + h[1, 1] * y + h[1, 2]) * Z
        dst_corners[i] = cv.Point(int(X), int(Y))

    return 1


if __name__ == '__main__':
    if len(sys.argv) == 3:
        object_filename = sys.argv[1]
        scene_filename = sys.argv[2]
    else:
        object_filename = "box.png"
        scene_filename = "box_in_scene.png"

    cv.namedWindow("Object", 1)
    cv.namedWindow("Object Correspond", 1)

    colors = [
        cv.Scalar(0, 0, 255),
        cv.Scalar(0, 128, 255),
        cv.Scalar(0, 255, 255),
        cv.Scalar(0, 255, 0),
        cv.Scalar(255, 128, 0),
        cv.Scalar(255, 255, 0),
        cv.Scalar(255, 0, 0),
        cv.Scalar(255, 0, 255),
        cv.Scalar(255, 255, 255),
    ]

    # read the two images
Example #29
0
from enthought.traits.ui.api import View, Item


class MeanShiftDemo(HasTraits):
    spatial_radius = Range(1, 40, 20)
    color_radius = Range(1, 100, 40)
    max_level = Range(1, 4, 2)
    do_button = Button("计算")

    view = View(Item("spatial_radius", label="空间半径"),
                Item("color_radius", label="颜色半径"),
                Item("max_level", label="最大层数"),
                Item("do_button", show_label=False),
                title="Mean Shift Demo控制面板")

    def __init__(self, *args, **kwargs):
        super(MeanShiftDemo, self).__init__(*args, **kwargs)
        self.img = cv.imread("fruits.jpg")
        self.img2 = self.img.clone()
        self.on_trait_change(self.redraw, "do_button")
        self.redraw()

    def redraw(self):
        cv.pyrMeanShiftFiltering(self.img, self.img2, self.spatial_radius,
                                 self.color_radius, self.max_level)
        cv.imshow("Mean Shift Demo", self.img2)


cv.namedWindow("Mean Shift Demo")
demo = MeanShiftDemo()
demo.configure_traits()
Example #30
0
        data = ArrayPlotData(x=np.arange(0, len(result[:])), y=result[:])
        self.plot = Plot(data, padding=10)
        line = self.plot.plot(("x", "y"))[0]
        self.select_tool = RangeSelection(line, left_button_selects=True)
        line.tools.append(self.select_tool)
        self.select_tool.on_trait_change(self._selection_changed, "selection")
        line.overlays.append(RangeSelectionOverlay(component=line))

        cv.imshow("Hist Demo", self.img)

        self.timer = Timer(50, self.on_timer)

    def _selection_changed(self):
        if self.select_tool.selection != None:
            self.need_update = True

    def on_timer(self):
        if self.need_update:
            x0, x1 = self.select_tool.selection
            self.img2[:] = self.img[:]
            np.clip(self.img2[:], x0, x1, out=self.img2[:])
            self.img2[:] -= x0
            self.img2[:] *= 256.0 / (x1 - x0)
            cv.imshow("Hist Demo", self.img2)
            self.need_update = False


cv.namedWindow("Hist Demo", cv.CV_WINDOW_AUTOSIZE)
if __name__ == "__main__":
    p = HistDemo()
    p.configure_traits()
w, h = img.size().width, img.size().height

def blend(img, img2): 
    """
    混合两幅图像, 其中img2有4个通道
    """
    #使用alpha通道计算img2的混和值
    b = img2[:,:,3:] / 255.0     
    a = 1 - b # img的混合值

    #混合两幅图像
    img[:,:,:3] *= a  
    img[:,:,:3] += b * img2[:,:,:3]

img2[:] = 0
for i in xrange(0, w, w/10): 
    cv.line(img2, cv.Point(i,0), cv.Point(i, h),  
        cv.Scalar(0, 0, 255, i*255/w), 5)

blend(img, img2) 

img2[:] = 0        
for i in xrange(0, h, h/10):
    cv.line(img2, cv.Point(0,i), cv.Point(w, i), 
        cv.Scalar(0, 255, 0, i*255/h), 5)
        
blend(img, img2)
     
cv.namedWindow("Draw Demo")
cv.imshow("Draw Demo", img)
cv.waitKey(0)
Example #32
0
def Erosion(pos, user_data):
    element = cv.asMat(np.ones((pos * 2 + 1, pos * 2 + 1), 'uint8'), True)
    cv.erode(src, dest, element)
    cv.imshow("Erosion&Dilation window", dest)


def Dilation(pos, user_data):
    element = cv.asMat(np.ones((pos * 2 + 1, pos * 2 + 1), 'uint8'), True)
    cv.dilate(src, dest, element)
    cv.imshow("Erosion&Dilation window", dest)


if __name__ == "__main__":
    filename = "baboon.jpg"
    if len(sys.argv) == 2:
        filename = sys.argv[1]
    src = cv.imread(filename, 1)
    if src.empty():
        sys.exit(-1)
    image = src.clone()
    dest = src.clone()
    cv.namedWindow("Opening&Closing window", 1)
    cv.namedWindow("Erosion&Dilation window", 1)
    cv.imshow("Opening&Closing window", src)
    cv.imshow("Erosion&Dilation window", src)
    cv.createTrackbar("Open", "Opening&Closing window", 0, 10, Opening)
    cv.createTrackbar("Close", "Opening&Closing window", 0, 10, Closing)
    cv.createTrackbar("Dilate", "Erosion&Dilation window", 0, 10, Dilation)
    cv.createTrackbar("Erode", "Erosion&Dilation window", 0, 10, Erosion)
    cv.waitKey(0)