opencv的助手包

cvhelper的Python项目详细描述


opencv python的简单帮助程序包

Code style: black

cvhelper是opencv python包的一个简单包装器。仅限上述包装 提供对OpenCV函数的访问,在C++风格下,它可能是乏味的编写。有 也不支持像rect、point等opencv类。cvhelper试图修复这个问题。

该套餐处于早期状态,欢迎投稿!包裹的内容 一直是一个需求和供应模型,其中的功能被添加为 找到opencv python。请毫不犹豫地提出问题、请求新功能或 增强建议!

安装

安装由python包管理器pip完成。

pip install cvhelper

这还将安装依赖项opencv-pythonopencv-contrib-pythonnumpy(如果尚未存在)。

示例

阅读视频

这一准则不言而喻。

香草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

旋转色轮

假设我们有下面的色轮图像,我们想旋转它。

alt text

我们当然想在它的中心旋转,它不在中心 图像的。使用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)

我们首先把图像转换成灰度。灰色的色轮 包含纯白色的任何值。因此,我们可以将图像阈值设为高 阈值,分割色轮。

然后我们在图像中找到轮廓(在这种情况下,只有一个轮廓),并且 找到包围轮廓的边框。从这个矩形我们可以找到中心 点通过左上角,高度和宽度。我们用这个来创造 旋转矩阵,并调用仿射扭曲函数。最后,我们画一个矩形 找到的轮廓。这只是为了看正装。

我们得到以下结果。

alt text

虽然这是一个完美的解决方案,但我们不得不旋转整个图像。 这是一个使用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对象,它 具有中心属性。方便。

我们以前除了旋转整个图像没有(明显的)选择, 我们现在只需在矩形上对图像进行切片,只需旋转图形本身。 就这个确切的目的而言,这并没有什么不同,但它只是一个示范。 我们找到新的旋转中心,并简单地调用旋转图像函数。 我们可以在这里选择使用度数还是弧度。最后我们画一个矩形 随机的颜色。

我们得到以下结果。

alt text

这不仅是一个有点乏味的写作,但我们也很容易 通过切片仅旋转圆的相关部分。轮廓,矩形 点对象也很容易使用。

其他易用领域

虽然没有提供示例,但opencv还有许多其他部分 当使用cvhelper时,这变得很容易使用。区域包括

  • 形态
  • 图像标准化
  • 颜色转换
  • 阈值化
  • 图像平滑

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
数组Java For Loop没有输出(我认为)它应该如何输出   java Maven可以在一个模块中打包两个jar,使用相同的文件名但不同的图表集吗?   java OData读取单个实体最佳实践   java为什么我的代码在以下条件下返回false?   java QueryDsl投影元素集合   在为Java Swing元素实现ActionListener时,如何解决静态引用错误?   libGDX设置允许我使用java8,它在Android中崩溃   如何将日期从shell脚本传递到java即时数据类型   java如何向JList添加复选框和图像   java如何编写这个Listview?   java Eclipse每项目构建设置   java如何将spring引导应用程序指向外部jar的logback。xml   java更改EditText的下划线/样式。。。。。不是链接,而是水平滚动文本   java JPQL:使用复合键建模具有多个关系的查询实体   javascript如何获取Java中的最后32个字节   sql检查Java Derby中是否存在架构   java如何从视图中获取MVC Spring控制器中jstl select的所有项   java gson在需要对象时遇到空数组问题