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非阻塞队列   java如何基于HttpComponent获取html内容   java为什么我的程序会显示此错误?   java spring控制器如何处理应用程序/octetstream请求?   尝试将数据插入数据库时出现java常规错误   无法在java多线程处理中维护生产者任务的顺序   java为什么JSON数据无法访问ViewPager?   java获取Maven中特定分支的SVN buildnumber   java客户端无法从服务器接收信息   java等轴测地图绘制,生成   java无法调试ProcessBuilder   java热点JVM阵列分配   在数组中存储“inputdialog”数据的java   saml Java Inflater引发DataFormatException“无效代码长度集”   从集合(爬虫、Jsoup、Java)写入文件