{"id":24306857,"url":"https://github.com/hakaboom/base_image","last_synced_at":"2026-02-16T08:31:51.530Z","repository":{"id":39897158,"uuid":"371633237","full_name":"hakaboom/base_image","owner":"hakaboom","description":"对opencv_python常用接口的二次开发","archived":false,"fork":false,"pushed_at":"2023-12-17T08:48:28.000Z","size":8883,"stargazers_count":14,"open_issues_count":2,"forks_count":7,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-27T17:26:37.847Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hakaboom.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2021-05-28T08:29:00.000Z","updated_at":"2025-11-11T01:36:45.000Z","dependencies_parsed_at":"2023-12-17T09:40:18.495Z","dependency_job_id":null,"html_url":"https://github.com/hakaboom/base_image","commit_stats":{"total_commits":117,"total_committers":3,"mean_commits":39.0,"dds":0.1709401709401709,"last_synced_commit":"775d925312a6c679af1810241b965df2e944647a"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/hakaboom/base_image","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakaboom%2Fbase_image","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakaboom%2Fbase_image/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakaboom%2Fbase_image/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakaboom%2Fbase_image/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hakaboom","download_url":"https://codeload.github.com/hakaboom/base_image/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hakaboom%2Fbase_image/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29503809,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T08:14:25.707Z","status":"ssl_error","status_checked_at":"2026-02-16T08:14:25.334Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-17T03:49:09.943Z","updated_at":"2026-02-16T08:31:51.513Z","avatar_url":"https://github.com/hakaboom.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# base_image\n对opencv_python常用接口的二次开发\n\n建议 opencv version \u003e= 4.5.5(不同opencv版本的python绑定,函数名可能会不同)\n\n# Example\n\n## Create\n1. 默认方式创建图片对象\n```python\nimport cv2\nfrom baseImage import Image\nfrom baseImage.constant import Place\n    \nImage(data='tests/image/0.png')  # 使用默认方式创建\n```\n\n2. 通过其他参数,调整图片参数\n\n- 使用place参数,修改数据格式\n  - Ndarray: 格式为numpy.ndarray格式\n  - Umat: python的绑定不多,没有ndarray灵活,可以用于opencl加速\n  - GpuMat: opencv的cuda格式,需要注意显存消耗\n    - 可以通过常量`Default_Pool`设定缓冲区\n\n    ```python\n    import cv2\n    from baseImage import Setting\n    \n    cv2.cuda.setBufferPoolUsage(True)\n    cv2.cuda.setBufferPoolConfig(cv2.cuda.getDevice(), 1024 * 1024 * (3 + 3), 1)\n    \n    stream = cv2.cuda.Stream()\n    pool = cv2.cuda.BufferPool(stream)\n    \n    Setting.Default_Stream = stream\n    Setting.Default_Pool = pool\n    ```\n\n```python\nimport cv2\nfrom baseImage import Image\nfrom baseImage.constant import Place\n    \nImage(data='tests/image/0.png', place=Place.Ndarray)  # 使用numpy\nImage(data='tests/image/0.png', place=Place.UMat)  # 使用Umat\nImage(data='tests/image/0.png', place=Place.GpuMat)  # 使用cuda\n```\n\n- 使用dtype,修改数据类型\n```python\nimport cv2\nimport numpy as np\nfrom baseImage.utils.api import cvType_to_npType, npType_to_cvType\nfrom baseImage import Image\n    \nImage(data='tests/image/0.png', dtype=np.uint8)\nImage(data='tests/image/0.png', dtype=np.int8)\nImage(data='tests/image/0.png', dtype=np.uint16)\nImage(data='tests/image/0.png', dtype=np.int16)\nImage(data='tests/image/0.png', dtype=np.int32)\nImage(data='tests/image/0.png', dtype=np.float32)\nImage(data='tests/image/0.png', dtype=np.float64)\n# cvType_to_npType和npType_to_cvType提供了numpy转opencv数据格式的方法, cv的数据格式意义自行百度\n```\n\n- clone,用于处理是否拷贝原数据\n```python\nimport cv2\nimport numpy as np\nfrom baseImage import Image, Rect\n\nimg1 = Image(data='tests/image/0.png')\nimg2 = Image(img1, clone=False)\nimg2.rectangle(rect=Rect(0, 0, 200, 200), color=(255, 0, 0), thickness=-1)\nimg2.imshow('img2')\nimg1.imshow('img1')\ncv2.waitKey(0)\n```\n\n## property\n1. shape: 获取图片的长、宽、通道数\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nprint(img.shape)\n# expect output\n#       (1037, 1920, 3)\n```\n2. size: 获取图片的长、宽\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nprint(img.size)\n# expect output\n#       (1037, 1920)\n```\n3. channels: 获取图片的通道数量\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nprint(img.channels)\n# expect output\n#       3\n```\n4. dtype: 获取图片的数据类型\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nprint(img.dtype)\n# expect output\n#       numpy.uint8\n```\n5. place: 获取图片的数据格式\n```python\nfrom baseImage import Image\nfrom baseImage.constant import Place\n\nimg = Image(data='tests/image/0.png', place=Place.Ndarray)\nprint(img.place == Place.Ndarray)\n# expect output\n#       True\n```\n6. data: 获取图片数据\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nprint(img.data)\n```\n\n## Function\n1. dtype_convert: 数据类型转换\n  - 将修改原图像数据\n```python\nfrom baseImage import Image\nimport numpy as np\n\nimg = Image(data='tests/image/0.png', dtype=np.uint8)\nprint(img.dtype)\nimg.dtype_convert(dtype=np.float32)\nprint(img.dtype)\n```\n2. place_convert: 数据格式转换\n  - 将修改原图像数据\n```python\nfrom baseImage import Image\nfrom baseImage.constant import Place\n\nimg = Image(data='tests/image/0.png', place=Place.Ndarray)\nprint(img.place == Place.Ndarray)\nimg.place_convert(place=Place.UMat)\nprint(img.place == Place.Ndarray)\nprint(img.place == Place.UMat)\n```\n\n3. clone: 克隆一个新的图片对象\n```python\nfrom baseImage import Image\nfrom baseImage.constant import Place\n\nimg = Image(data='tests/image/0.png', place=Place.Ndarray)\nimg2 = img.clone()\nprint(img == img2)\n```\n\n4. rotate: 旋转图片, 现在只支持opencv自带的三个方向\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nimg.rotate(code=cv2.ROTATE_180).imshow('180')\nimg.rotate(code=cv2.ROTATE_90_CLOCKWISE).imshow('90_CLOCKWISE')\nimg.rotate(code=cv2.ROTATE_90_COUNTERCLOCKWISE).imshow('90_COUNTERCLOCKWISE')\ncv2.waitKey(0)\n```\n\n5. resize: 缩放图像\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.resize(200, 200)\nprint(new_img.size)\n```\n\n6. cvtColor: 转换图片颜色空间\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.cvtColor(cv2.COLOR_BGR2GRAY)\nnew_img.imshow()\ncv2.waitKey(0)\n```\n\n7. crop: 裁剪图片\n```python\nfrom baseImage import Image, Rect\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.crop(rect=Rect(0, 0, 400, 400))\nnew_img.imshow()\ncv2.waitKey(0)\n```\n\n8. threshold: 二值化图片\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.threshold(thresh=0, maxval=255, code=cv2.THRESH_OTSU)\nnew_img.imshow()\ncv2.waitKey(0)\n```\n\n9. rectangle: 在图像上画出矩形\n  - 会在原图上进行修改\n```python\nfrom baseImage import Image, Rect\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nimg.rectangle(rect=Rect(100, 100, 300, 300), color=(255, 0, 0), thickness=-1)\nimg.imshow()\ncv2.waitKey(0)\n```\n\n10. copyMakeBorder: 扩充图片边缘\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.copyMakeBorder(top=10, bottom=10, left=10, right=10, borderType=cv2.BORDER_REPLICATE)\nnew_img.imshow()\ncv2.waitKey(0)\n```\n\n11. gaussianBlur: 高斯模糊\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.gaussianBlur(size=(11, 11), sigma=1.5, borderType=cv2.BORDER_DEFAULT)\nnew_img.imshow()\ncv2.waitKey(0)\n```\n\n12. warpPerspective: 透视变换\n```python\nfrom baseImage import Image, Size\nimport cv2\nimport numpy as np\n\nimg = Image(data='tests/image/0.png')\npoint_1 = np.float32([[0, 0], [100, 0], [0, 200], [100, 200]])\npoint_2 = np.float32([[0, 0], [50, 0], [0, 100], [50, 100]])\nmatrix = cv2.getPerspectiveTransform(point_1, point_2)\nsize = Size(50, 100)\n\nnew_img = img.warpPerspective(matrix, size=size)\nnew_img.imshow()\ncv2.waitKey(0)\n```\n13. bitwise_not: 反转图片颜色\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nnew_img = img.bitwise_not()\nnew_img.imshow()\ncv2.waitKey(0)\n```\n\n14. imshow: 以GUI显示图片\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png')\nimg.imshow('img1')\ncv2.waitKey(0)\n```\n\n15. imwrite: 将图片保存到指定路径\n```python\nfrom baseImage import Image\nimport cv2\n\nimg = Image(data='tests/image/0.png').cvtColor(cv2.COLOR_BGR2GRAY)\nimg.imwrite('tests/image/0_gray.png')\n```\n\n16. split: 拆分图像通道\n  - 会直接返回拆分后的数据,不是Image类型\n```python\nfrom baseImage import Image\n\nimg = Image(data='tests/image/0.png')\nimg_split = img.split()\n```\n\n## Extra\n1. SSIM: 图片结构相似性\n   - resize: 图片缩放大小 \n```python\nfrom baseImage import SSIM, Image\n\nssim = SSIM(resize=(600, 600))\nimg1 = Image('tests/image/0.png')\nimg2 = Image('tests/image/0.png')\nprint(ssim.ssim(im1=img1, im2=img2))\n```\n\n2. image_diff: 基于SSIM的图片差异对比\n```python\nfrom baseImage import ImageDiff, Image\nimport cv2\n\ndiff = ImageDiff()\n\nimg1 = Image('tests/image/0.png')\nimg2 = Image('tests/image/1.png') \ncnts = diff.diff(img1, img2)\nimageA = img1.data.copy()\nimageB = img2.data.copy()\nprint(len(cnts))\nfor c in cnts:\n    (x, y, w, h) = cv2.boundingRect(c)\n    cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)\n    cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)\n\ncv2.imshow(\"Original\", imageA)\ncv2.imshow(\"Modified\", imageB)\ncv2.waitKey(0)\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhakaboom%2Fbase_image","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhakaboom%2Fbase_image","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhakaboom%2Fbase_image/lists"}