opencv的助手包
cvhelper的Python项目详细描述
opencv python的简单帮助程序包
cvhelper是opencv python包的一个简单包装器。仅限上述包装 提供对OpenCV函数的访问,在C++风格下,它可能是乏味的编写。有 也不支持像rect、point等opencv类。cvhelper试图修复这个问题。
该套餐处于早期状态,欢迎投稿!包裹的内容 一直是一个需求和供应模型,其中的功能被添加为 找到opencv python。请毫不犹豫地提出问题、请求新功能或 增强建议!
安装
安装由python包管理器pip完成。
pip install cvhelper
这还将安装依赖项opencv-python
、opencv-contrib-python
和numpy
(如果尚未存在)。
示例
阅读视频
这一准则不言而喻。
香草opencv:
importcv2ascvvideo=cv.VideoCapture("path/to/file")ifnotvideo.isOpened():raiseValueError("Could not open video")whileTrue:ok,frame=video.read()ifnotok:breakcv.imshow("Frame",frame)ifcv.waitKey(0)&0xFF==ord('q'):breakvideo.release()
cvhelper:
importcv2ascvimportcvhelperascvhwithcvh.load_video("path/to/file")asvideo:forframeincvh.read_frames(video,start,stop,step):cv.imshow("Frame",frame)ifcvh.wait_key(0)==ord('q'):break
旋转色轮
假设我们有下面的色轮图像,我们想旋转它。
我们当然想在它的中心旋转,它不在中心 图像的。使用opencv的一个可能的解决方案是
importcv2ascvimportrandomimg=cv.imread("resources/color_wheel_invert.png")gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)_,otsu=cv.threshold(gray,250,255,cv.THRESH_BINARY_INV)_,contours,_=cv.findContours(otsu,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)contour=contours[0]rect=cv.boundingRect(contour)# Gives a tuple (x, y, w, h)x,y,w,h=rectcolor=[random.randint(0,255)for_inrange(3)]degrees=60center=(x+w/2),(y+h/2)rotation_matrix=cv.getRotationMatrix2D(center,degrees,1)rotated_image=cv.warpAffine(img,rotation_matrix,gray.shape[::-1])cv.rectangle(rotated_image,(x,y),(x+w,y+h),color)cv.imshow("Image",rotated_image)cv.waitKey(0)
我们首先把图像转换成灰度。灰色的色轮 包含纯白色的任何值。因此,我们可以将图像阈值设为高 阈值,分割色轮。
然后我们在图像中找到轮廓(在这种情况下,只有一个轮廓),并且 找到包围轮廓的边框。从这个矩形我们可以找到中心 点通过左上角,高度和宽度。我们用这个来创造 旋转矩阵,并调用仿射扭曲函数。最后,我们画一个矩形 找到的轮廓。这只是为了看正装。
我们得到以下结果。
虽然这是一个完美的解决方案,但我们不得不旋转整个图像。 这是一个使用cvhelper的解决方案。
cvhelper:
importcv2ascvimportcvhelperascvhimg=cv.imread("resources/color_wheel_invert.png")gray=cvh.bgr2gray(img)otsu=cvh.threshold_binary(gray,250,inverse=True)contours=cvh.find_external_contours(otsu)contour=contours[0]rect=contour.bounding_rect# Gives a Rect objectdegrees=60center=rect.center# Gives a Point objecttop_left=rect.tl# Gives a Point objectnew_center=center-top_leftimg[rect.slice]=cvh.rotate_image(img[rect.slice],new_center,degrees,unit=cvh.AngleUnit.DEGREES)cvh.rectangle(img,rect,cvh.Color.RANDOM)cv.imshow("Image",img)cvh.wait_key(0)
我们再次采用同样的方法。但是,使用轮廓类,我们可以 只需调用bounding rect属性。这会产生一个rect对象,它 具有中心属性。方便。
我们以前除了旋转整个图像没有(明显的)选择, 我们现在只需在矩形上对图像进行切片,只需旋转图形本身。 就这个确切的目的而言,这并没有什么不同,但它只是一个示范。 我们找到新的旋转中心,并简单地调用旋转图像函数。 我们可以在这里选择使用度数还是弧度。最后我们画一个矩形 随机的颜色。
我们得到以下结果。
这不仅是一个有点乏味的写作,但我们也很容易 通过切片仅旋转圆的相关部分。轮廓,矩形 点对象也很容易使用。
其他易用领域
虽然没有提供示例,但opencv还有许多其他部分 当使用cvhelper时,这变得很容易使用。区域包括
- 形态
- 图像标准化
- 颜色转换
- 阈值化
- 图像平滑