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)
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()
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()
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()
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
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()
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()
# -*- 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()
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()
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
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()
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)
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)