前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:前言 – 人工智能教程
目录
安装opencv
其中,opencv-python只包含了OpenCV的主要模块,而opencv-contrib-python还包含了一些拓展模块,两者都适用于桌面环境,而opencv-python-headless是用于服务器环境的无头软件包,无UI界面,看需求安装即可。
pip install opencv-python
这个安装没有智能提示
这个好像没有最新版:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
pypi有最新版,下载很慢,可以用迅雷下载,很快。
跟踪根据id分配颜色:
def get_color(idx): idx = idx * 5 color = ((37 * idx) % 255, (17 * idx) % 255, (29 * idx) % 255) return color
改变窗口大小:
c++:
创建窗口时候改变下参数就可以鼠标随意拖动窗口改变大小啦 cv::namedWindow("camera", CV_WINDOW_NORMAL);//CV_WINDOW_NORMAL就是0 cv::imshow("camera", frame);
python:
imgpath=r"d:/140.jpg" width=1200 height=800 img=cv2.imread(imgpath) cv2.namedWindow("canny", 0) cv2.resizeWindow("canny", 300, 300) # 设置窗口大小 cv2.imshow("canny", img) cv2.waitKey()
移动位置
imgpath=r"d:/140.jpg" width=1200 height=800 img=cv2.imread(imgpath) cv2.namedWindow('image', cv2.WINDOW_NORMAL) # 改变窗口位置:left top cv2.moveWindow("image", 1000, 100) #改变窗口位置:left top cv2.imshow("image", img) cv2.waitKey()
选取矩形ROI
OpenCV自带 API 可直接选择矩形区域作为ROI,该API位于目标追踪模块,主要是cv2.selectROI()函数。
import cv2 import imutils img = cv2.imread("./test_image.jpg") img = imutils.resize(img, width=500) roi = cv2.selectROI(windowName="roi", img=img, showCrosshair=True, fromCenter=False) x, y, w, h = roi cv2.rectangle(img=img, pt1=(x, y), pt2=(x + w, y + h), color=(0, 0, 255), thickness=2) cv2.imshow("roi", img) cv2.waitKey(0) cv2.destroyAllWindows()
选取多边形ROI
多边形ROI,主要利用鼠标交互进行绘制:
1. 单击左键,选择多边形的点;
2. 单击右键,删除最近一次选择的点;
3. 单击中键,确定ROI区域并可视化。
4. 按”S“键,将多边形ROI区域的点保存到本地”config.pkl"文件中。
import cv2 import numpy as np import joblib pts = [] # 用于存放点 select_ok = False def draw_roi(event, x, y, flags, param): img2 = img.copy() global select_ok if event == cv2.EVENT_LBUTTONDOWN: # 左键点击,选择点 if select_ok: pts.clear() pts.append((x, y)) select_ok = False if event == cv2.EVENT_RBUTTONDOWN: # 右键点击,取消最近一次选择的点 select_ok = True if (event == cv2.EVENT_LBUTTONDBLCLK): select_ok=True if event == cv2.EVENT_MBUTTONDOWN: # 中键绘制轮廓 pts.pop() if select_ok: mask = np.zeros(img.shape, np.uint8) points = np.array(pts, np.int32) # saved_data = {"ROI": pts} joblib.dump(value=points, filename=pkl_file) print('select ok points') print(points) # 画多边形 img2 = cv2.polylines(img2, [points], True, (0, 255, 0), 2) # cv2.imshow('mask', mask) elif len(pts) > 0: # img2=cv2.polylines(img2, [np.array(pts, np.int32)], True, (255, 0, 255), 2) for i in range(len(pts)): cv2.circle(img2, pts[i],3, (255, 0, 255), -1) # x ,y 为鼠标点击地方的坐标 if i<len(pts)-1: cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 255), thickness=2) cv2.imshow('image', img2) # 创建图像与窗口并将窗口与回调函数绑定 # img = cv2.imread("./zhai_first.jpg") # img = cv2.imread("./nuohua_first.jpg") img = cv2.imread("d:/caoyuan.jpg") pkl_file="zhai_config.pkl" cv2.namedWindow('image') cv2.setMouseCallback('image', draw_roi) print("[INFO] 单击左键:选择ROI点,单击右键:选择完毕,单击中键:撤销一步") print("[INFO] 按 ESC 退出") # while True: key = cv2.waitKey(0) & 0xFF print("select end----") if len(pts) > 0: print("ok") if key == 27: print("stop") cv2.destroyAllWindows()
读取config.pkl:
model1 = joblib.load(filename="config.pkl") print(model1)
没有选择完毕时,都画时,会出现意想不到的情况:
import cv2 import numpy as np import joblib pts = [] # 用于存放点 # 统一的:mouse callback function def draw_roi(event, x, y, flags, param): img2 = img.copy() select_ok=False if event == cv2.EVENT_LBUTTONDOWN: # 左键点击,选择点 pts.append((x, y)) if event == cv2.EVENT_RBUTTONDOWN: # 右键点击,取消最近一次选择的点 select_ok = True if (event == cv2.EVENT_LBUTTONDBLCLK): select_ok=True if event == cv2.EVENT_MBUTTONDOWN: # 中键绘制轮廓 pts.pop() if select_ok: mask = np.zeros(img.shape, np.uint8) points = np.array(pts, np.int32) print(points) # saved_data = {"ROI": pts} joblib.dump(value=points, filename=pkl_file) print('select ok points',points) # 画多边形 # mask = cv2.polylines(img, [points], True, (255, 0, 255), 2) # cv2.imshow('mask', mask) if len(pts) > 0: img2=cv2.polylines(img, [np.array(pts, np.int32)], True, (255, 0, 255), 2) for i in range(len(pts)): cv2.circle(img2, pts[i],3, (255, 0, 255), -1) # x ,y 为鼠标点击地方的坐标 # if i<len(pts)-1: # cv2.line(img=img2, pt1=pts[i], pt2=pts[i + 1], color=(255, 0, 255), thickness=2) cv2.imshow('image', img2) # 创建图像与窗口并将窗口与回调函数绑定 # img = cv2.imread("./zhai_first.jpg") img = cv2.imread("./nuohua_first.jpg") pkl_file="zhai_config.pkl" cv2.namedWindow('image') cv2.setMouseCallback('image', draw_roi) print("[INFO] 单击左键:选择点,单击右键:删除上一次选择的点,单击中键:确定ROI区域") print("[INFO] 按 ESC 退出") # while True: key = cv2.waitKey(0) & 0xFF print("select end----") if len(pts) > 0: print("ok") if key == 27: print("stop") cv2.destroyAllWindows()
画的螺旋状:
绘制图形
以下内容转自:
OpenCV入门(26):矩形、圆形、扇形及任意多边形的绘制_Home丶Basic的博客-CSDN博客_opencv 扇形
import cv2 import numpy as np newImageInfo = (500,500,3) dst = np.zeros(newImageInfo,np.uint8) # 绘制矩形 1.目标图片 2.左上角 3.右下角 4.颜色 5.内容是否填充(-1:填充; 》0的值:线条宽度) cv2.rectangle(dst,(50,100),(200,300),(255,0,0),-1) # 绘制圆形 1.目标图片 2.圆心 3.半径 4.颜色 5.是否填充 cv2.circle(dst,(250,250),80,(0,255,0),2) # 绘制扇形 1.目标图片 2.椭圆圆心 3.长短轴长度 4.偏转角度 5.圆弧起始角度 6.终止角度 7.颜色 8.是否填充 cv2.ellipse(dst,(256,256),(150,100),0,0,145,(255,255,0),-1) # 绘制任意多边形 points = np.array([[150,50],[140,140],[200,170],[250,250],[150,50]],np.int32) # print(points.shape)# --->(5, 2) points = points.reshape((-1,1,2)) # print(points.shape)# --->(5, 1, 2) cv2.polylines(dst,[points],True,(0,255,255)) cv2.imshow('dst',dst) cv2.waitKey(0)
绘制圆扇形
# 绘制圆形扇形 1.目标图片 2.椭圆圆心 3.长短轴长度 4.偏转角度 5.圆弧起始角度 6.终止角度 7.颜色 8.是否填充 cv2.ellipse(dst,(256,256),(150,150),0,0,-45,(255,255,0),0)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/538.html