def redraw(self): edge_img = cv.Mat() # 边缘检测 cv.Canny(self.img_gray, edge_img, self.th1, self.th2) 3### # 计算结果图 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)
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 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)
def __init__(self, **traits): super(HistDemo, self).__init__(**traits) img = cv.imread("lena.jpg") gray_img = cv.Mat() cv.cvtColor(img, gray_img, cv.CV_BGR2GRAY) self.img = gray_img self.img2 = self.img.clone() result = cv.MatND() r = cv.vector_float32([0, 256]) ranges = cv.vector_vector_float32([r, r]) cv.calcHist( cv.vector_Mat([self.img]), channels=cv.vector_int([0, 1]), mask=cv.Mat(), hist=result, histSize=cv.vector_int([256]), ranges=ranges, ) 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 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)
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)
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
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)
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)
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)
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 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 mouse_call_back(event, x, y, flags, user_data): global seed # 右键松开时,初始化种子图像 if event == cv.CV_EVENT_RBUTTONUP: img2[:] = img[:] markers[:] = 0 seed = 1 cv.imshow("Watershed Demo", img2) if seed == len(marks_color): return # 左键按下时,在种子图像上添加种子 if flags == cv.CV_EVENT_FLAG_LBUTTON: pt = cv.Point(x, y) cv.circle(markers, pt, 5, cv.Scalar(seed, seed, seed, seed), cv.CV_FILLED) cv.circle(img2, pt, 5, marks_color[seed], cv.CV_FILLED) cv.imshow("Watershed Demo", img2) # 左键松开时,使用watershed进行图像分割 if event == cv.CV_EVENT_LBUTTONUP: seed += 1 tmp_markers = markers.clone() cv.watershed(img, tmp_markers) color_map = tmp_markers[:].astype(np.int) img3 = img2.clone() img4 = cv.asMat(palette[color_map]) cv.addWeighted(img3, 1.0, img4, mask_opacity, 0, img3) cv.imshow("Watershed Demo", img3)
def mouse_call_back(event, x, y, flags, user_data): global seed # 右键松开时,初始化种子图像 if event == cv.CV_EVENT_RBUTTONUP: img2[:] = img[:] markers[:] = 0 seed = 1 cv.imshow("Watershed Demo", img2) if seed == len(marks_color): return # 左键按下时,在种子图像上添加种子 if flags == cv.CV_EVENT_FLAG_LBUTTON: pt = cv.Point(x, y) cv.circle(markers, pt, 5, cv.Scalar(seed,seed,seed,seed), cv.CV_FILLED) cv.circle(img2, pt, 5, marks_color[seed], cv.CV_FILLED) cv.imshow("Watershed Demo", img2) # 左键松开时,使用watershed进行图像分割 if event == cv.CV_EVENT_LBUTTONUP: seed += 1 tmp_markers = markers.clone() cv.watershed(img, tmp_markers) color_map = tmp_markers[:].astype(np.int) img3 = img2.clone() img4 = cv.asMat( palette[color_map] ) cv.addWeighted(img3, 1.0, img4, mask_opacity, 0, img3) cv.imshow("Watershed Demo", img3)
import numpy as np import pyopencv as cv2 # Load an color image in grayscale img = cv2.imread('IMG.jpeg',0) cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows() cv2.imwrite('1.png', img)
# -*- coding: utf-8 -*- import pyopencv as cv import numpy as np y, x = np.ogrid[-1:1:250j, -1:1:250j] z = np.sin(10 * np.sqrt(x * x + y * y)) * 0.5 + 0.5 np.round(z, decimals=1, out=z) img = cv.asMat(z) cv.namedWindow("demo1") cv.imshow("demo1", img) img2 = cv.Mat() cv.Laplacian(img, img2, img.depth(), ksize=3) cv.namedWindow("demo2") cv.imshow("demo2", img2) cv.waitKey(0)
# -*- coding: utf-8 -*- import pyopencv as cv import numpy as np y, x = np.ogrid[-1:1:250j,-1:1:250j] z = np.sin(10*np.sqrt(x*x+y*y))*0.5 + 0.5 np.round(z, decimals=1, out=z) img = cv.asMat(z) cv.namedWindow("demo1") cv.imshow("demo1", img) img2 = cv.Mat() cv.Laplacian(img, img2, img.depth(), ksize=3) cv.namedWindow("demo2") cv.imshow("demo2", img2) 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)
# create a correspond Mat correspond = cv.Mat(image.rows+object.rows, image.cols, cv.CV_8UC1, cv.Scalar(0)) # copy the images to correspond -- numpy way correspond[:object.rows, :object.cols] = object[:] correspond[object.rows:, :image.cols] = image[:] # find pairs ptpairs = findPairs(surf, objectKeypoints, objectDescriptors, imageKeypoints, imageDescriptors) for pair in ptpairs: cv.line( correspond, cv.asPoint(pair[0]), cv.Point(int(pair[1].x), int(pair[1].y+object.rows)), colors[8] ) # locate planar object if locatePlanarObject( ptpairs, src_corners, dst_corners ): for i in range(4): r1 = dst_corners[i] r2 = dst_corners[(i+1)%4] cv.line( correspond, cv.Point(r1.x, r1.y+object.rows ), cv.Point(r2.x, r2.y+object.rows ), colors[8] ) # show the object correspondents cv.imshow("Object Correspond", correspond) # draw circles for keypt in objectKeypoints: cv.circle(object_color, cv.asPoint(keypt.pt), int(keypt.size*1.2/9.*2), colors[0], 1, 8, 0) cv.imshow("Object", object_color) cv.waitKey(0)
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)
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)
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)
correspond[:object.rows, :object.cols] = object[:] correspond[object.rows:, :image.cols] = image[:] # find pairs ptpairs = findPairs(surf, objectKeypoints, objectDescriptors, imageKeypoints, imageDescriptors) for pair in ptpairs: cv.line(correspond, cv.asPoint(pair[0]), cv.Point(int(pair[1].x), int(pair[1].y + object.rows)), colors[8]) # locate planar object if locatePlanarObject(ptpairs, src_corners, dst_corners): for i in range(4): r1 = dst_corners[i] r2 = dst_corners[(i + 1) % 4] cv.line(correspond, cv.Point(r1.x, r1.y + object.rows), cv.Point(r2.x, r2.y + object.rows), colors[8]) # show the object correspondents cv.imshow("Object Correspond", correspond) # draw circles for keypt in objectKeypoints: cv.circle(object_color, cv.asPoint(keypt.pt), int(keypt.size * 1.2 / 9. * 2), colors[0], 1, 8, 0) cv.imshow("Object", object_color) cv.waitKey(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)
# -*- 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)
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 Closing(pos, user_data): element = cv.asMat(np.ones((pos * 2 + 1, pos * 2 + 1), 'uint8'), True) cv.dilate(src, image, element) cv.erode(image, dest, element) cv.imshow("Opening&Closing window", dest)
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)
import numpy as np import pyopencv as cv2 # Load an color image in grayscale img = cv2.imread('IMG.jpeg', 0) cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows() cv2.imwrite('1.png', img)
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): # break #======== EOF =================================================== # def new_dst(src, zero=False, width=None, # height=None, nchannels=None, size=None): # ''' # ''' # # # print nchannels # if width is not None and height is not None: # size = cv.Size(width, height) # elif size is None: # size = cv.getSize(src) #
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)
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);
def Closing(pos, user_data): element = cv.asMat(np.ones((pos*2+1, pos*2+1), 'uint8'), True) cv.dilate(src, image, element) cv.erode(image, dest, element) cv.imshow("Opening&Closing window",dest);
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.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)
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)