shape = cv2.MORPH_RECT else: shape = cv2.MORPH_CROSS st = cv2.getStructuringElement(shape, (size, size)) image = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel=st, iterations=iter) cv2.imshow('results', image) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['iterations'] = cvparam.sliderparam("Iterations", 5, 1, updateImage) cvparam_dict['shape'] = cvparam.sliderparam("K Ellipse/Rect/Cross", 2, 1, updateImage) cvparam_dict['size'] = cvparam.kernelparam("K Size", 21, 5, updateImage) import argparse parser = argparse.ArgumentParser( description= "Interactively experiment with morphology gradient parameters.") parser.add_argument('file', help='image to threshold', type=str) # add a command line parameter for every slider parameter cvparam.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparam.setValuesFromCommandLine(cvparam_dict, args)
minLength = cvparam_dict["minLength"].value maxGapLength = cvparam_dict["maxGapLength"].value lines = cv2.HoughLinesP(edges, rho, theta, threshold=threshold, minLineLength=minLength, maxLineGap=maxGapLength) imag = img.copy() for x1, y1, x2, y2 in lines[0]: cv2.line(imag, (x1, y1), (x2, y2), (0, 255, 0), 2) cvparams.annotateImageWithParams(cvparam_dict, imag) cv2.imshow("results", imag) if __name__ == "__main__": print __doc__ cvparam_dict = {} cvparam_dict["threshold"] = cvparams.sliderparam("Threshold", 500, 50, updateImage) cvparam_dict["minLength"] = cvparams.sliderparam("Min Length", 500, 100, updateImage) cvparam_dict["maxGapLength"] = cvparams.sliderparam("Max Gap", 500, 20, updateImage) import argparse parser = argparse.ArgumentParser(description="Interactively experiment with HoughLinesP parameters.") parser.add_argument("file", help="image to threshold", type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args) from glob import glob
'invert'].value > 0 else cv2.THRESH_BINARY image = cv2.adaptiveThreshold(img, maxValue=255, adaptiveMethod=threshMethod, thresholdType=threshType, blockSize=blockSize, C=c) cv2.imshow('results', image) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['useGaussian'] = cvparam.sliderparam("Use Gaussian", 1, 1, updateImage) cvparam_dict['invert'] = cvparam.sliderparam("Invert", 1, 0, updateImage) cvparam_dict['c'] = cvparam.sliderparam("C", 30, 5, updateImage) cvparam_dict['blockSize'] = cvparam.kernelparam("Block Size (3,5,..)", 21, 5, updateImage) import argparse parser = argparse.ArgumentParser( description= "Interactively experiment with adaptiveThreshold parameters.") parser.add_argument('file', help='image to threshold', type=str) # add a command line parameter for every slider parameter cvparam.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparam.setValuesFromCommandLine(cvparam_dict, args)
for x1, y1, x2, y2 in lines: cv2.line(img, (x1, y1), (x2, y2), color, 2) def updateImage(): copy = img.copy() draw_lines(copy, lines) draw_lines(copy, vert_lines, color=(255, 127, 0)) cv2.imshow('results', copy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['maxDegFromVert'] = cvparam.sliderparam( "Deg From Vert", 90, 10, updateMaxVertAngle) import argparse parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('file', help='image(s) to threshold', type=str) # add a command line parameter for every slider parameter cvparam.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparam.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file): img = cv2.imread(filename) # extract lines
def draw_lines(img, lines, color=(0,255,0)): for x1,y1,x2,y2 in lines: cv2.line(img,(x1,y1),(x2,y2),color,2) def updateImage(): copy = img.copy() draw_lines(copy, lines) draw_lines(copy, vert_lines, color=(255,127,0)) cv2.imshow('results', copy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['maxDegFromVert'] = cvparam.sliderparam("Deg From Vert", 90, 10, updateMaxVertAngle) import argparse parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('file', help='image(s) to threshold', type=str) # add a command line parameter for every slider parameter cvparam.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparam.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file): img = cv2.imread(filename) # extract lines
cvparam_dict['threshold2'].value, apertureSize=cvparam_dict['aperture'].value) imag = img.copy() imag /= 2 imag[edges != 0] = (0, 255, 0) cvparams.annotateImageWithParams(cvparam_dict, imag) cv2.imshow('results', imag) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['threshold1'] = cvparams.sliderparam("Threshold1", 2000, 500, updateImage) cvparam_dict['threshold2'] = cvparams.sliderparam("Threshold2", 2000, 2000, updateImage) cvparam_dict['aperture'] = cvparams.kernelparam("Aperture (3, 5, 7)", 7, 5, updateImage) import argparse parser = argparse.ArgumentParser( description="Interactively experiment with Canny operator.") parser.add_argument('file', help='image to threshold (wildcard ok)', type=str) parser.add_argument('--blur', help='blur preprocessing', action='store_true') # add a command line parameter for every slider parameter
cvparams.annotateImageWithParams(cvparam_dict, copy) cv2.imshow('results', copy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['filterSize'] = cvparams.kernelparam("Filter Size", 100, 11, updateImage) cvparam_dict['spaceKernelSize'] = cvparams.kernelparam( "Space Kernel Size", 150, 109, updateImage) cvparam_dict['colorKernelSize'] = cvparams.kernelparam( "Color Kernel Size", 150, 109, updateImage) cvparam_dict['erode'] = cvparams.sliderparam("Erode", 2, 0, updateImage) cvparam_dict['dilate'] = cvparams.sliderparam("Dilate", 2, 0, updateImage) cvparam_dict['threshK'] = cvparams.kernelparam("ThreshK", 21, 11, updateImage) cvparam_dict['threshC'] = cvparams.sliderparam("ThreshC", 20, 10, updateImage) import argparse parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('file', help='image(s) to process', type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args)
copy = img.copy() squares = find_contours(copy) cv2.drawContours(copy, squares, -1, (0, 255, 0), 1 ) cvparams.annotateImageWithParams(cvparam_dict, copy) cv2.imshow('results', copy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['filterSize'] = cvparams.kernelparam("Filter Size", 100, 11, updateImage) cvparam_dict['spaceKernelSize'] = cvparams.kernelparam("Space Kernel Size", 150, 109, updateImage) cvparam_dict['colorKernelSize'] = cvparams.kernelparam("Color Kernel Size", 150, 109, updateImage) cvparam_dict['erode'] = cvparams.sliderparam("Erode", 2, 0, updateImage) cvparam_dict['dilate'] = cvparams.sliderparam("Dilate", 2, 0, updateImage) cvparam_dict['threshK'] = cvparams.kernelparam("ThreshK", 21, 11, updateImage) cvparam_dict['threshC'] = cvparams.sliderparam("ThreshC", 20, 10, updateImage) import argparse parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('file', help='image(s) to process', type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file):
def updateImage(): c = cvparam_dict['c'].value blockSize = cvparam_dict['blockSize'].value threshMethod = cv2.ADAPTIVE_THRESH_GAUSSIAN_C if cvparam_dict['useGaussian'].value > 0 else cv2.ADAPTIVE_THRESH_MEAN_C threshType = cv2.THRESH_BINARY_INV if cvparam_dict['invert'].value > 0 else cv2.THRESH_BINARY image = cv2.adaptiveThreshold(img, maxValue=255, adaptiveMethod=threshMethod, thresholdType=threshType, blockSize=blockSize, C=c) cv2.imshow('results', image) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['useGaussian'] = cvparam.sliderparam("Use Gaussian", 1, 1, updateImage) cvparam_dict['invert'] = cvparam.sliderparam("Invert", 1, 0, updateImage) cvparam_dict['c'] = cvparam.sliderparam("C", 30, 5, updateImage) cvparam_dict['blockSize'] = cvparam.kernelparam("Block Size (3,5,..)", 21, 5, updateImage) import argparse parser = argparse.ArgumentParser(description="Interactively experiment with adaptiveThreshold parameters.") parser.add_argument('file', help='image to threshold', type=str) # add a command line parameter for every slider parameter cvparam.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparam.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file):
import sliderparam as cvparams def updateImage(): destDepth = cv2.CV_32F; # should be higher than source depth to avoid overflow imgCopy = cv2.Sobel(img, ddepth=destDepth, dx=cvparam_dict['dx'].value, dy=cvparam_dict['dy'].value, ksize=cvparam_dict['kernelSize'].value, scale=cvparam_dict['scale'].value, delta=cvparam_dict['delta'].value) cvparams.annotateImageWithParams(cvparam_dict, imgCopy) cv2.imshow('results', imgCopy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['dx'] = cvparams.sliderparam("dx", 2, 1, updateImage) cvparam_dict['dy'] = cvparams.sliderparam("dy", 2, 1, updateImage) cvparam_dict['kernelSize'] = cvparams.kernelparam("Kernel (3, 5,..)", 21, 5, updateImage) cvparam_dict['delta'] = cvparams.sliderparam("delta", 5, 0, updateImage) cvparam_dict['scale'] = cvparams.sliderparam("scale", 2, 1, updateImage) import argparse parser = argparse.ArgumentParser(description="Apply Sobel operator.") parser.add_argument('file', help='image to process', type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args) from glob import glob
if cvparam_dict['shape'].value == 0: shape = cv2.MORPH_ELLIPSE elif cvparam_dict['shape'].value == 1: shape = cv2.MORPH_RECT else: shape = cv2.MORPH_CROSS st = cv2.getStructuringElement(shape, (size, size)) image = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel=st, iterations=iter) cv2.imshow('results', image) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['iterations'] = cvparam.sliderparam("Iterations", 5, 1, updateImage) cvparam_dict['shape'] = cvparam.sliderparam("K Ellipse/Rect/Cross", 2, 1, updateImage) cvparam_dict['size'] = cvparam.kernelparam("K Size", 21, 5, updateImage) import argparse parser = argparse.ArgumentParser(description="Interactively experiment with morphology gradient parameters.") parser.add_argument('file', help='image to threshold', type=str) # add a command line parameter for every slider parameter cvparam.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparam.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file): img = cv2.imread(filename)
cvparam_dict['kernelHeight'].value), cvparam_dict['sigmaY'].value) cvparams.annotateImageWithParams(cvparam_dict, imgCopy) cv2.imshow('results', imgCopy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['kernelWidth'] = cvparams.kernelparam("Kernel X (3,5,..)", 51, 5, updateImage) cvparam_dict['kernelHeight'] = cvparams.kernelparam( "Kernel Y (3,5,..)", 51, 5, updateImage) cvparam_dict['sigmaY'] = cvparams.sliderparam("Sigma Y", 7, 0, updateImage) import argparse parser = argparse.ArgumentParser( description="Interactively experiment with blur operator.") parser.add_argument('file', help='image to threshold', type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file): img = cv2.imread(filename) assert img is not None, "File " + args.file + " was not found."
def updateImage(): edges = cv2.Canny(gray, cvparam_dict['threshold1'].value, cvparam_dict['threshold2'].value, apertureSize=cvparam_dict['aperture'].value) imag = img.copy() imag /= 2 imag[edges != 0] = (0, 255, 0) cvparams.annotateImageWithParams(cvparam_dict, imag) cv2.imshow('results', imag) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['threshold1'] = cvparams.sliderparam("Threshold1", 2000, 500, updateImage) cvparam_dict['threshold2'] = cvparams.sliderparam("Threshold2", 2000, 2000, updateImage) cvparam_dict['aperture'] = cvparams.kernelparam("Aperture (3, 5, 7)", 7, 5, updateImage) import argparse parser = argparse.ArgumentParser(description="Interactively experiment with Canny operator.") parser.add_argument('file', help='image to threshold (wildcard ok)', type=str) parser.add_argument('--blur', help='blur preprocessing', action='store_true') # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args) from glob import glob
threshold = cvparam_dict['threshold'].value minLength = cvparam_dict['minLength'].value maxGapLength = cvparam_dict['maxGapLength'].value lines = cv2.HoughLinesP(edges, rho, theta, threshold=threshold, minLineLength=minLength, maxLineGap=maxGapLength) imag = img.copy() for x1,y1,x2,y2 in lines[0]: cv2.line(imag,(x1,y1),(x2,y2),(0,255,0),2) cvparams.annotateImageWithParams(cvparam_dict, imag) cv2.imshow('results', imag) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['threshold'] = cvparams.sliderparam("Threshold", 500, 50, updateImage) cvparam_dict['minLength'] = cvparams.sliderparam("Min Length", 500, 100, updateImage) cvparam_dict['maxGapLength'] = cvparams.sliderparam("Max Gap", 500, 20, updateImage) import argparse parser = argparse.ArgumentParser(description="Interactively experiment with HoughLinesP parameters.") parser.add_argument('file', help='image to threshold', type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args) from glob import glob for filename in glob(args.file): img = get_image(filename)
ddepth=destDepth, dx=cvparam_dict['dx'].value, dy=cvparam_dict['dy'].value, ksize=cvparam_dict['kernelSize'].value, scale=cvparam_dict['scale'].value, delta=cvparam_dict['delta'].value) cvparams.annotateImageWithParams(cvparam_dict, imgCopy) cv2.imshow('results', imgCopy) if __name__ == '__main__': print __doc__ cvparam_dict = {} cvparam_dict['dx'] = cvparams.sliderparam("dx", 2, 1, updateImage) cvparam_dict['dy'] = cvparams.sliderparam("dy", 2, 1, updateImage) cvparam_dict['kernelSize'] = cvparams.kernelparam("Kernel (3, 5,..)", 21, 5, updateImage) cvparam_dict['delta'] = cvparams.sliderparam("delta", 5, 0, updateImage) cvparam_dict['scale'] = cvparams.sliderparam("scale", 2, 1, updateImage) import argparse parser = argparse.ArgumentParser(description="Apply Sobel operator.") parser.add_argument('file', help='image to process', type=str) # add a command line parameter for every slider parameter cvparams.addCommandLineArgs(cvparam_dict, parser) args = parser.parse_args() cvparams.setValuesFromCommandLine(cvparam_dict, args)