图像截切显示python实现

主要用到opencv的cv2,直接贴代码:

import cv2
import numpy as np
global img
#global point1,point2
cut_Pos = np.zeros((2,2),np.int)
def on_mouse(event,x,y,flags,param):
    global img,point1,point2
    img2 = img.copy()
    if event == cv2.EVENT_LBUTTONDOWN:
        point1=(x,y)
        cv2.circle(img2,point1,10,(0,255,0),5)#点击左键,显示绿色圆圈
        cv2.imshow('image',img2)
    elif event == cv2.EVENT_MOUSEMOVE and (flags & cv2.EVENT_FLAG_LBUTTON):
        cv2.rectangle(img2,point1,(x,y),(255,0,0),5)#移动点击下的左键,画出蓝色截图框
        cv2.imshow('image',img2)
    elif event == cv2.EVENT_LBUTTONUP:
        point2 = (x,y)
        cv2.rectangle(img2,point1,point2,(0,0,255),5)#松开左键,显示最终的红色截图框
        cv2.imshow('image',img2)
        
        cut_Pos[0][0]=min(point1[0],point2[0])
        cut_Pos[0][1]=max(point1[0],point2[0])
        cut_Pos[1][0]=min(point1[1],point2[1])
        cut_Pos[1][1]=max(point1[1],point2[1])
        cv2.imshow('image',img[cut_Pos[1][0]:cut_Pos[1][1],cut_Pos[0][0]:cut_Pos[0][1]])
        
        #min_x = min(point1[0],point2[0])
        #min_y = min(point1[1],point2[1])
        #width = abs(point1[0]-point2[0])
        #height = abs(point1[1]-point2[1])
        #cut_img = img[min_y:min_y+height,min_x:min_x+width]
        #cv2.imwrite('photo_1.jpeg',cut_img)
        
        
def main():
    global img
    img = cv2.imread('E://photo_1.jpeg')
    cv2.namedWindow('image')
    cv2.setMouseCallback('image',on_mouse)
    cv2.imshow('image',img)
    cv2.waitKey(0)
if __name__ == '__main__':
    main()

图像截切显示python实现_第1张图片图像截切显示python实现_第2张图片图像截切显示python实现_第3张图片图像截切显示python实现_第4张图片

用到的函数主要是:

cv2.imread(image_path,flag):

读取图像,两个参数。参数1给出图像路径;参数2指定图像读取方式(默认加载彩色图像,标识为1;灰度图标识0;-1表示加载的图像包含alpha通道)。

cv2.imshow():

建立窗口显示图片,共两个参数。参数1指定窗口名称;参数2是读入的图片对象。

cv2.nameWindow():

新建窗口,有两个参数。参数1窗口名称;参数2是窗口属性,决定是否窗口可以调整。

 

cv2.setMouseCallback():

void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata=0)
    winname:窗口的名字
    onMouse:鼠标响应函数,回调函数。指定窗口里每次鼠标时间发生的时候,被调用的函数指针

                    这个函数的原型应该为void on_Mouse(int event, int x, int y, int flags, void* param)
                              event是 CV_EVENT_*变量之一;

                              x和y是鼠标指针在图像坐标系的坐标(不是窗口坐标系);

                              flags是CV_EVENT_FLAG的组合,

                              param是用户定义的传递到setMouseCallback函数调用的参数。

                              userdate:传给回调函数的参数

cv2.waitKey():

键盘绑定函数,只有一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入。

 

你可能感兴趣的:(学习)