关于opencv基础知识入门30讲及代码

关于opencv基础知识入门30讲及代码,第1张

关于opencv基础知识入门30讲及代码 opencv-python

opencv 不支持透明

R G B 设备独立空间 1.图像读取与显示
def red_deno():   
    image = cv.imread("D:/0.jpg")     #注意符号    
    cv.imshow("input",image)    
    cv.waitKey(0)   
    cv.destroyAllWindows()
2.图像色彩空间转换
def color_space_demo():     #色彩空间    
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255   
    gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY)   #处理为灰度   
    hsv = cv.cvtColor(image,cv.COLOR_RGB2HSV)     #处理hsv        H 0 0-180                   cv.imshow("gray",gray)    
    cv.imshow("hsv",hsv)    
    cv.waitKey(0)    
    cv.destroyAllWindows()
3.图像对象的创建与读写
def mat_demo():     #色彩空间    
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    print(image.shape)  #(417, 500, 3)   高,宽,通道数    
    print(image)    #图片就是一串数组    
    roi = image[60:100,60:200,:]   #创建一个空白区域    
    blank = np.zeros_like(image)    # blank[60:100,60:200] = image[60:100,60:200]   #截取一个图片空间    
    blank = image   #blank = np.copy(image)     #直接原图拷贝过来    
    cv.imshow("image",image)    
    cv.imshow("blank", blank)    
    cv.imshow("roi", roi)    
    cv.waitKey(0)    
    cv.destroyAllWindows()
4.图片像素的读写 *** 作
def pixel_demo():     #色彩空间    
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    cv.imshow("input", image)   #显示输入图片    
    h,w,c = image.shape    
    for row in range (h):        
        for col in range (w):            
            r,g,b=image[row,col]            
            image[row,col] = r-255,g-255,b-255     #rgb取反    
    cv.imshow("result",image)    
    cv.imwrite("D:/result.png",image)       #将输出后图片进行保留    
    cv.waitKey(0)    
    cv.destroyAllWindows()

5.图像像素的算数 *** 作
def math_demo():     #色彩空间    
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    cv.imshow("input", image)   #显示输入图片    
    h,w,c = image.shape    
    blank = np.zeros_like(image)   
    blank[:,:] = (8,8,8)    
    cv.imshow("blank",blank)    
    # result = cv.add(image,blank)    #增加对比度,加法运算    
    result = cv.subtract(image, blank)     #减法运算   
    result = cv.divide(image, blank)    #除法运算    
    result = cv.multiply(image, blank)    #乘法运算    
    cv.imshow("result",result)    
    cv.waitKey(0)    
    cv.destroyAllWindows()
6.TrackBar/滚动条 *** 作演示-调整图像亮度

def nothing(x):    
print(x)
def adjust_light_demo():    
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)                                                                                                                                     cv.createTrackbar("light","input",0,100,nothing)    
    cv.imshow("input",image)    
    blank = np.zeros_like(image)    
    while True:        
        pos = cv.getTrackbarPos("light","input")        
        blank[:,:] = (pos,pos,pos)        
        # cv.imshow("blank",blank)        
        # result = cv.add(image,blank)    #增加对比度,加法运算       
        result = cv.subtract(image, blank)     #减法运算       
        # result = cv.divide(image, blank)    #除法运算        
        # result = cv.multiply(image, blank)    #乘法运算        
        cv.imshow("result",result)        
        c=cv.waitKey(1)        
    if c == 27:            
        break    
    cv.destroyAllWindows()
7.TrackBar/滚动条 *** 作演示-参数传递与调整亮度与对比度
def adjust_contrst_demo():   
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)                                             cv.createTrackbar("light","input",0,100,nothing)    
    cv.createTrackbar("contrst", "input", 100, 200, nothing)    
    cv.imshow("input",image)    
    blank = np.zeros_like(image)    
    while True:        
        light = cv.getTrackbarPos("light","input")        
        contrst = cv.getTrackbarPos("contrst", "input")/100                                     print("light",light,"contrst",contrst)        
        # blank[:,:] = (light,light,light)        
        result = cv.addWeighted(image,contrst,blank,0.5,light)        
        cv.imshow("result",result)        
        c=cv.waitKey(1)        
        if c == 27:            
            break    
    cv.destroyAllWindows()
8.键盘响应 *** 作
def keny_demo():             #键盘响应    
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)   
    cv.imshow("input",image)    
    while True:       
    c = cv.waitKey(1)     #停顿一毫秒        
    if c ==49:   #1            
        gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY)            
        cv.imshow("result",gray)        
    if c == 50:   #2            
        hsv = cv.cvtColor(image,cv.COLOR_RGB2HSV)            
        cv.imshow("result", hsv)        
    if c == 51:    #3            
        invert = cv.bitwise_not(image)            
        cv.imshow("result", invert)        
    # if c == 52:        
    #     invert = cv.bitwise_and(image)        
    #     cv.imshow("result", invert)            
               
            if c == 27:            
                break    
    cv.destroyAllWindows()
9.opencv自带颜色表 *** 作
def color_table_demo():             #键盘响应   
    colormap = [    cv.COLORMAP_AUTUMN,   
    cv.COLORMAP_BONE,   
    cv.COLORMAP_JET,    
    cv.COLORMAP_WINTER,    
    cv.COLORMAP_RAINBOW,    
    cv.COLORMAP_OCEAN,    
    cv.COLORMAP_SUMMER,    
    cv.COLORMAP_SPRING,    
    cv.COLORMAP_COOL,    
    cv.COLORMAP_HSV,    
    cv.COLORMAP_PINK,    
    cv.COLORMAP_HOT]   
    image = cv.imread("D:/0.jpg")  # 注意符号     rgb,0-255    
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)    
    cv.imshow("input",image)    
    index = 0    
    while True:        
        dst = cv.applyColorMap(image,colormap[index%12])   #取模12        
        index += 1        
        cv.imshow("color style",dst)        
        c = cv.waitKey(1000)  # 停顿一毫秒       
        if c == 27:            
            break    
    cv.destroyAllWindows()

![1633174791952](C:UsersasusAppDataRoamingTyporatypora-user-images1633174791952.png)

 

10.图像像素的逻辑 *** 作
def bitwise_demo():    
    b1 = np.zeros((400,500,3),dtype = np.uint8)    
    b1[:,:] = (0,255,0)    
    b2 = np.zeros((400, 500,3), dtype=np.uint8)   
    b2[:, :] = (255,0,255)    cv.imshow("b1", b1)    
    cv.imshow("b2", b2)    
    dst1 = cv.bitwise_and(b1,b2)    
    dst2 = cv.bitwise_or(b1,b2)    
    dst3 = cv.bitwise_not(b1,b2)    
    cv.imshow("bitwise_and", dst1)    
    cv.imshow("bitwise_or", dst2)    
    cv.imshow("bitwise_not", dst3)    
    cv.waitKey(0)    
    cv.destroyAllWindows()

11.通道分离与合并
def channels_split_demo():    
    b1 = cv.imread("D:/0.jpg")    
    print(b1.shape)    
    cv.imshow("input", b1)    
    cv.imshow("b2", b1[:,:,-1])    #[:,:,-1]和[:,:,3]    倒数第一和正数第三    
    mv = cv.split(b1)   #分离    
    mv[0][:,:] = 255    
    result = cv.merge(mv)   #合并    
    cv.imshow("result",result)    
    print(len(mv))    
    cv.waitKey(0)    
    cv.destroyAllWindows()

12.图像色彩空间转换
def color_space_demo():   
    b1 = cv.imread("D:/245.jpg")   
    print(b1.shape)    
    cv.imshow("input", b1)   
    hsv = cv.cvtColor(b1,cv.COLOR_RGB2HSV)   
    cv.imshow("hsv",hsv)    
    mask = cv.inRange(hsv,(35,43,46),(77,255,255))    
    cv.bitwise_not(mask,mask)    
    result = cv.bitwise_and(b1,b1,mask=mask)    
    cv.imshow("result",result)    
    cv.waitKey(0)    
    cv.destroyAllWindows()

hsv过滤表

13.图像的像素统计
def pixel_means_demo():    
    b1 = cv.imread("D:/245.jpg")    
    print(b1.shape)    
    cv.imshow("input", b1)    
    print(np.max(b1[:,:,2]))    
    means,dev = cv.meanStdDev(b1)    
    print(means,"dev",dev)    
    cv.waitKey(0)    
    cv.destroyAllWindows()

结果为像素 ,通道数

最大值

r g b 三个均值

r g b 三个方差

14.图像几何形状绘制
def dawing_demo():    
    # b1 = np.zeros((512,512,3),dtype = np.uint8)    
    b1 = cv.imread("D:/245.jpg")    
    b2 = np.copy(b1)    
    cv.rectangle(b1,(50,50),(400,400),(0,0,255),4,8,0)   #绘制矩形    
    # cv.circle(b1,(200,200),100,(255,2,255),-1,8,0)   #绘制圆形    
    # cv.line(b1,(50,50),(400,400),(0,0,255),4,8,0)   #绘制直线    
    cv.putText(b1,"99%face",(50,50),cv.FONT_HERSHEY_SIMPLEX,1.0,(0,255,254),2,8,0)   
    # b1[:,:,:] = 0     #清除绘图痕迹    
    # b1 = b2         #方法二   先复制一个空白图再调用    
    cv.imshow("result",b1)    
    # b1 = cv.imread("D:/245.jpg")    
    cv.waitKey(0)    
    cv.destroyAllWindows()

15.随机数和随机颜色
def random_color_demo():    
    b1 = np.zeros((512,512,3),dtype = np.uint8)    
    while True:        
        xx = np.random.randint(0,512,2,dtype = np.int)        
        yy = np.random.randint(0,512,2,dtype = np.int)        
        bgr = np.random.randint(0,255,3,dtype = np.int32)        										print(bgr[0],bgr[1],bgr[2],xx[0],yy[0],xx[1],yy[1])       
        cv.line(b1,(xx[0],yy[0]),(xx[1],yy[1]),(np.int(bgr[0]),np.int(bgr[1]),np.int(bgr[2])),8,8,0)   #绘制直线        
        cv.imshow("result",b1)        
        c = cv.waitKey()        
        if c == 27:            
        	break    
    cv.destroyAllWindows()

16.多边形填充与绘制
def polyline_drawing_demo():   
    canvas = np.zeros((512,512,3),dtype = np.uint8)    
    pts = np.array([[100,100],[350,100],[450,280],[320,320],[80,400]],dtype=np.int32)   #这是一个数组     cv.fillPoly(canvas,[pts],(255,0,0),8,0)      #填充    
    cv.polylines(canvas,[pts],True,(0,255,0),2,8,0)    #绘制外框    
   	# cv.drawContours(canvas,[pts],-1,(255,0,0),-1)    #填充加绘制    
    cv.imshow("result", canvas)    
    cv.waitKey(0)    
    cv.destroyAllWindows()

17.鼠标 *** 作与响应
b1 = cv.imread("D:/245.jpg") #np.zeros((512,512,3),dtype = np.uint8)
b2 = np.copy(b1)
x1 = -1
x2 = -1
y1 = -1
y2 = -1
def mouse_drawing(event,x,y,flags,param):    
    global x1,y1,x2,y2    
    if event == cv.EVENT_LBUTTONDOWN:        
        x1 = x        
        y1 = y    
    if event == cv.EVENT_MOUSEMOVE:        
        if x1<0 or y1<0:            
        	return       
            x2 = x        
            y2 = y        
            dx = x2 - x1        
            dy = y2 - y1        
            if dx > 0 and dy > 0:            
                b1[:,:,:] = b2            
                cv.rectangle(b1,(x1,y1),(x2,y2),(0,255,0),2,8,0)    
    if event == cv.EVENT_LBUTTONUP:        
        if x1<0 or y1<0:            
            return        
            x2 = x        
            y2 = y        
            dx = x2 - x1        
            dy = y2 - y1        
                if dx > 0 and dy > 0:           
                    b1[:,:,:] = b2            
                    cv.rectangle(b1,(x1,y1),(x2,y2),(0,255,0),2,8,0)        
                    x1 = -1        
                    x2 = -1        
                    y1 = -1        
                    y2 = -1
def mouse_demo():    
    cv.namedWindow("mouse_demo",cv.WINDOW_AUTOSIZE)    
    cv.setMouseCallback("mouse_demo",mouse_drawing)    
    while True:        
        cv.imshow("mouse_demo", b1)        
        c = cv.waitKey(10)        
        if c == 27:            
        	break    
        cv.destroyAllWindows()

18.图像像素类型转换与归一化
def norm_demo():    
	image = cv.imread("D:/245.jpg")    
	cv.namedWindow("mouse_demo",cv.WINDOW_AUTOSIZE)    
	result = np.zeros_like(np.float32(image))    																																				cv.normalize(np.float32(image),result,0,1,cv.NORM_MINMAX,dtype=cv.CV_32F)    
	cv.imshow("mouse_demo", np.uint8(image*255))    
	# print(image/255)   
	c = cv.waitKey(0)    
	cv.destroyAllWindows()

19.图像放缩与插值
def resize_demo():    
    image = cv.imread("D:/245.jpg")    
    h, w, c = image.shape    
    cv.namedWindow("resize_demo",cv.WINDOW_AUTOSIZE)    
    # dst = cv.resize(image,(w//2,h//2),interpolation=cv.INTER_BITS2)    #只能对整数 *** 作    
    dst = cv.resize(image, (0,0),fx = 0.75,fy=0.75, interpolation=cv.INTER_BITS2)   #可对任意大小 *** 作    	 cv.imshow("resize_demo()",dst)   
    c = cv.waitKey(0)    
    cv.destroyAllWindows()

20.图像翻转
def flip_demo():    
    image = cv.imread("D:/245.jpg")    
    cv.imshow("input", image)    
    cv.namedWindow("resize_demo",cv.WINDOW_AUTOSIZE)    
    dst = cv.flip(image,-1)    
    cv.imshow("flip_demo()",dst)    
    c = cv.waitKey(0)    
    cv.destroyAllWindows()

21.图像旋转
def rotate_demo():   
    src = cv.imread("D:/245.jpg")    
    cv.imshow("input", src)    
    h, w, c = src.shape    
    # 定义矩阵    
    M = np.zeros(( 2, 3), dtype=np.float32)    
    # 定义角度    
    alpha = np.cos(np.pi / 4.0)   
    beta = np.sin(np.pi / 4.0)    
    print( "alpha : ", alpha)    
    # 初始化矩阵   
    M[ 0, 0] = alpha   
    M[ 1, 1] = alpha    
    M[ 0, 1] = beta   
    M[ 1, 0] = -beta    
    cx = w / 2   
    cy = h / 2    
    tx = ( 1-alpha)*cx - beta*cy    
    ty = beta*cx + ( 1-alpha)*cy    
    M[ 0, 2] = tx    
    M[ 1, 2] = ty    
    # change with full size    
    bound_w = int(h * np.abs(beta) + w * np.abs(alpha))   
    bound_h = int(h * np.abs(alpha) + w * np.abs(beta))   
    # 添加中心位置迁移   
    M[ 0, 2] += bound_w / 2- cx   
    M[ 1, 2] += bound_h / 2- cy    
    dst = cv.warpAffine(src, M, (bound_w, bound_h))    
    cv.imshow( "rotate without cropping", dst)   
    c = cv.waitKey(0)    
    cv.destroyAllWindows()

22.视频文件和摄像头使用
def video_demo():    
    cap = cv.VideoCapture(0)   #读取摄像头编号为0    
    # cap = cv.VideoCapture("C:/Users/asus/哈哈哈哈.mp4")    
    w = cap.get(cv.CAP_PROP_frame_WIDTH)    
    h = cap.get(cv.CAP_PROP_frame_HEIGHT)    
    fps = cap.get(cv.CAP_PROP_FPS)    
    print(w, h, fps)    
    while True:        
        ret ,frame = cap.read()        
        frame = cv.flip(frame,1)   #读取视频时可不用        
        if ret is not True:            
        	break        
        cv.imshow("frame",frame)        
        c = cv.waitKey(10)        
        if c == 27:            
        	break    
    cv.destroyAllWindows()

23.视频处理与保存
def video_demo():    cap = cv.VideoCapture("C:/Users/asus/哈哈哈哈.mp4")   
    w = cap.get(cv.CAP_PROP_frame_WIDTH)    

    h = cap.get(cv.CAP_PROP_frame_HEIGHT)    
    fps = cap.get(cv.CAP_PROP_FPS)    
    out = 																				cv.VideoWriter("D:TEST.mp4",cv.VideoWriter.fourcc('P','I','M','1'),fps(np.int(w),np.int(h)),True)    print(w, h, fps)   
    while True:        
    ret ,frame = cap.read()        
    frame = cv.flip(frame,1)   #读取视频时可不用        
    if ret is not True:           
    break       
    cv.imshow("frame",frame)       
    c = cv.waitKey(10)       
    if c == 27:            
    break    
    cv.destroyAllWindows()    
    out.release()
24.图像直方图
def image_hist():    
    image = cv.imread("D:/245.jpg")    
    cv.imshow( "input", image)    
    color = ('blue','green','red')    
    for i,color in enumerate(color):        
    hist = cv.calcHist([image],[i],None,[256],[0,256])       
    print(hist)        
    plt.plot(hist,color = color)        
    plt.xlim(0,256)   
    plt.show()    
    cv.waitKey(0)   
    cv.destroyAllWindows()

25.二维直方图
def image_hist2d():    
    image = cv.imread("D:/245.jpg")    
    hsv = cv.cvtColor(image,cv.COLOR_RGB2HSV)    
    hist = cv.calcHist([hsv], [0,1], None, [64,64], [0,180,0, 256])   
    dst = cv.resize(hist,(800,800))    
    cv.normalize(dst,dst,0,255,cv.NORM_MINMAX)    
    cv.imshow( "input", image)    
    dst = cv.applyColorMap(np.uint8(dst),cv.COLORMAP_JET)    
    cv.imshow("hist", dst)    
    plt.imshow(hist,interpolation='nearest')   
    plt.title('2D Histogram')    
    plt.show()    
    cv.waitKey(0)   
    cv.destroyAllWindows()

26.直方图均衡化
def equal_hist2d():    
    image = cv.imread("D:/245.jpg",cv.IMREAD_GRAYSCALE)    
    cv.imshow("input",image)    
    result = cv.equalizeHist(image)    
    cv.imshow("result",result)    
    cv.waitKey(0)    
    cv.destroyAllWindows()

27.图像卷积 *** 作

均值卷积和高斯卷积(权重系数不同)

def conv_demo():    
    image = cv.imread("D:/245.jpg")    
    cv.imshow("input",image)    
    result = cv.blur(image,(5,5))    
    cv.imshow("result",result)    
    cv.waitKey(0)    
    cv.destroyAllWindows()

28.高斯模糊

def GaussianBlur_demo():   
    image = cv.imread("D:/245.jpg")    
    cv.imshow("input",image)   
    result = cv.GaussianBlur(image,(3,3),5)   #必须为奇数   
    cv.imshow("result",result)   
    cv.waitKey(0)   
    cv.destroyAllWindows()
29.高斯双边模糊
def bifilter_demo():    
    image = cv.imread("D:/012.png")   
    cv.imshow("input",image)    
    result = cv.bilateralFilter(image,0,100,10)    
    cv.imshow("result",result)   
    cv.waitKey(0)   
    cv.destroyAllWindows()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4654526.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存