# Blur Generator
[![PyPI pyversions](https://img.shields.io/pypi/pyversions/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI implementation](https://img.shields.io/pypi/implementation/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)
[![Test](https://github.com/NatLee/Blur-Generator/actions/workflows/test.yml/badge.svg)](https://github.com/NatLee/Blur-Generator/actions/workflows/test.yml)[![Release](https://github.com/NatLee/Blur-Generator/actions/workflows/release.yml/badge.svg)](https://github.com/NatLee/Blur-Generator/actions/workflows/release.yml)
[![PyPI status](https://img.shields.io/pypi/status/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI license](https://img.shields.io/pypi/l/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)
[![PyPI version fury.io](https://badge.fury.io/py/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)
[![PyPI download month](https://img.shields.io/pypi/dm/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI download week](https://img.shields.io/pypi/dw/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI download day](https://img.shields.io/pypi/dd/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)
[![forthebadge made-with-python](http://ForTheBadge.com/images/badges/made-with-python.svg)](https://www.python.org/)
This tool is for generating blur on images.
There are 3 types of blur modes of `motion`, `lens`, or `gaussian`.
We can use the results on model training or something else.
> You can find a simply use case with deep learning in https://github.com/NatLee/simply-blur-detector
## Installation
```bash
pip install blurgenerator
```
Check it on [Pypi](https://pypi.org/project/BlurGenerator/).
## Usage
```bash
blurgenerator --help
```
```bash
usage: blurgenerator [-h] [--input INPUT] [--input_depth_map INPUT_DEPTH_MAP] [--output OUTPUT] [--type TYPE] [--motion_blur_size MOTION_BLUR_SIZE] [--motion_blur_angle MOTION_BLUR_ANGLE] [--lens_radius LENS_RADIUS] [--lens_components LENS_COMPONENTS]
[--lens_exposure_gamma LENS_EXPOSURE_GAMMA] [--gaussian_kernel GAUSSIAN_KERNEL] [--depth_num_layers DEPTH_NUM_LAYERS] [--depth_min_blur DEPTH_MIN_BLUR] [--depth_max_blur DEPTH_MAX_BLUR]
Size for motion blur. Default is 100.
--motion_blur_angle MOTION_BLUR_ANGLE
Angle for motion blur. Default is 30.
--lens_radius LENS_RADIUS
Radius for lens blur. Default is 5.0.
--lens_components LENS_COMPONENTS
Components for lens blur. Default is 4.
--lens_exposure_gamma LENS_EXPOSURE_GAMMA
Exposure gamma for lens blur. Default is 2.
--gaussian_kernel GAUSSIAN_KERNEL
Kernel for gaussian. Default is 100.
--depth_num_layers DEPTH_NUM_LAYERS
Layer for depth blur. Default is 3.
--depth_min_blur DEPTH_MIN_BLUR
Min. blur for depth blur. Default is 1.
--depth_max_blur DEPTH_MAX_BLUR
Max. blur for depth blur. Default is 100.
```
## Example and Result
### Common use
- Original image
![original image](https://github.com/NatLee/Blur-Generator/raw/main/doc/test.png)
#### Usage
- Motion blur
`blurgenerator --type motion --input ./doc/test.png --output ./doc/motion.png`
```python
import cv2
from blurgenerator import motion_blur
img = cv2.imread('test.png')
result = motion_blur(img, size=100, angle=30)
cv2.imwrite('./output.png', result)
```
![motion blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/motion.png)
- Lens blur
`blurgenerator --type lens --input ./doc/test.png --output ./doc/lens.png`
```python
import cv2
from blurgenerator import lens_blur
img = cv2.imread('test.png')
result = lens_blur(img, radius=5, components=4, exposure_gamma=2)
cv2.imwrite('./output.png', result)
```
![lens blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/lens.png)
- Gaussian blur
`blurgenerator --type gaussian --input ./doc/test.png --output ./doc/gaussian.png`
```python
import cv2
from blurgenerator import gaussian_blur
img = cv2.imread('test.png')
result = gaussian_blur(img, 100)
cv2.imwrite('./output.png', result)
```
![gaussian blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/gaussian.png)
### With depth map
Feature from this [issue](https://github.com/NatLee/Blur-Generator/issues/1).
- Original image
![photo](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-test.jpg)
- Depth map
![depth map](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-map-test.png)
#### Usage
- Motion blur with depth map
`blurgenerator --input .\doc\depth-test.jpg --type motion --input_depth_map .\doc\depth-map-test.png --depth_num_layers 5 --depth_min_blur 1 --depth_max_blur 50 --output .\doc\depth-motion-output.png`
```python
import cv2
from blurgenerator import motion_blur_with_depth_map
img = cv2.imread('test.jpg')
depth_img = cv2.imread('test-depth.png')
result = motion_blur_with_depth_map(
img,
depth_map=depth_img,
angle=30,
num_layers=10,
min_blur=1,
max_blur=50
)
cv2.imwrite('./output.png', result)
```
![depth motion blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-motion-output.png)
- Lens blur with depth map
`blurgenerator --input .\doc\depth-test.jpg --type lens --input_depth_map .\doc\depth-map-test.png --depth_num_layers 3 --depth_min_blur 1 --depth_max_blur 50 --output .\doc\depth-lens-output.png`
```python
import cv2
from blurgenerator import lens_blur_with_depth_map
img = cv2.imread('test.jpg')
depth_img = cv2.imread('test-depth.png')
result = lens_blur_with_depth_map(
img,
depth_map=depth_img,
components=5,
exposure_gamma=5,
num_layers=10,
min_blur=1,
max_blur=50
)
cv2.imwrite('./output.png', result)
```
![depth lens blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-lens-output.png)
- Gaussian blur with depth map
`blurgenerator --input .\doc\depth-test.jpg --type gaussian --input_depth_map .\doc\depth-map-test.png --depth_num_layers 3 --depth_min_blur 1 --depth_max_blur 50 --output .\doc\depth-gaussian-output.png`
```python
import cv2
from blurgenerator import gaussian_blur_with_depth_map
img = cv2.imread('test.jpg')
depth_img = cv2.imread('test-depth.png')
result = gaussian_blur_with_depth_map(
img,
depth_map=depth_img,
sigma=5,
num_layers=10,
min_blur=1,
max_blur=50
)
cv2.imwrite('./output.png', result)
```
![depth gaussian blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-gaussian-output.png)
## Contributor
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center"><a href="https://github.com/NatLee"><img src="https://avatars.githubusercontent.com/u/10178964?v=3?s=100" width="100px;" alt="Nat Lee"/><br /><sub><b>Nat Lee</b></sub></a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
## Reference
- [Circularly symmetric convolution and lens blur](http://yehar.com/blog/?p=1495)
## LICENSE
[MIT](LICENSE)
Raw data
{
"_id": null,
"home_page": "https://github.com/NatLee/Blur-Generator",
"name": "BlurGenerator",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "blur, generator, blur-image, cli",
"author": "Nat Lee",
"author_email": "natlee.work@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/6d/35/231d49ae2620a686e89e0c11c394de62f7216aa6bea5a4216b2d8ad33132/blurgenerator-1.1.0.tar.gz",
"platform": null,
"description": "# Blur Generator\n\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI implementation](https://img.shields.io/pypi/implementation/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)\n\n[![Test](https://github.com/NatLee/Blur-Generator/actions/workflows/test.yml/badge.svg)](https://github.com/NatLee/Blur-Generator/actions/workflows/test.yml)[![Release](https://github.com/NatLee/Blur-Generator/actions/workflows/release.yml/badge.svg)](https://github.com/NatLee/Blur-Generator/actions/workflows/release.yml)\n\n[![PyPI status](https://img.shields.io/pypi/status/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI license](https://img.shields.io/pypi/l/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)\n\n[![PyPI version fury.io](https://badge.fury.io/py/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)\n\n[![PyPI download month](https://img.shields.io/pypi/dm/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI download week](https://img.shields.io/pypi/dw/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)[![PyPI download day](https://img.shields.io/pypi/dd/BlurGenerator.svg)](https://pypi.python.org/pypi/BlurGenerator/)\n\n[![forthebadge made-with-python](http://ForTheBadge.com/images/badges/made-with-python.svg)](https://www.python.org/)\n\nThis tool is for generating blur on images.\n\nThere are 3 types of blur modes of `motion`, `lens`, or `gaussian`.\n\nWe can use the results on model training or something else.\n\n> You can find a simply use case with deep learning in https://github.com/NatLee/simply-blur-detector\n\n## Installation\n\n```bash\npip install blurgenerator\n```\n\nCheck it on [Pypi](https://pypi.org/project/BlurGenerator/).\n\n## Usage\n\n```bash\nblurgenerator --help\n```\n\n```bash\nusage: blurgenerator [-h] [--input INPUT] [--input_depth_map INPUT_DEPTH_MAP] [--output OUTPUT] [--type TYPE] [--motion_blur_size MOTION_BLUR_SIZE] [--motion_blur_angle MOTION_BLUR_ANGLE] [--lens_radius LENS_RADIUS] [--lens_components LENS_COMPONENTS]\n [--lens_exposure_gamma LENS_EXPOSURE_GAMMA] [--gaussian_kernel GAUSSIAN_KERNEL] [--depth_num_layers DEPTH_NUM_LAYERS] [--depth_min_blur DEPTH_MIN_BLUR] [--depth_max_blur DEPTH_MAX_BLUR]\n Size for motion blur. Default is 100.\n --motion_blur_angle MOTION_BLUR_ANGLE\n Angle for motion blur. Default is 30.\n --lens_radius LENS_RADIUS\n Radius for lens blur. Default is 5.0.\n --lens_components LENS_COMPONENTS\n Components for lens blur. Default is 4.\n --lens_exposure_gamma LENS_EXPOSURE_GAMMA\n Exposure gamma for lens blur. Default is 2.\n --gaussian_kernel GAUSSIAN_KERNEL\n Kernel for gaussian. Default is 100.\n --depth_num_layers DEPTH_NUM_LAYERS\n Layer for depth blur. Default is 3.\n --depth_min_blur DEPTH_MIN_BLUR\n Min. blur for depth blur. Default is 1.\n --depth_max_blur DEPTH_MAX_BLUR\n Max. blur for depth blur. Default is 100.\n```\n\n## Example and Result\n\n### Common use\n\n- Original image\n\n![original image](https://github.com/NatLee/Blur-Generator/raw/main/doc/test.png)\n\n#### Usage\n\n- Motion blur\n\n`blurgenerator --type motion --input ./doc/test.png --output ./doc/motion.png`\n\n```python\nimport cv2\nfrom blurgenerator import motion_blur\nimg = cv2.imread('test.png')\nresult = motion_blur(img, size=100, angle=30)\ncv2.imwrite('./output.png', result)\n```\n\n![motion blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/motion.png)\n\n- Lens blur\n\n`blurgenerator --type lens --input ./doc/test.png --output ./doc/lens.png`\n\n```python\nimport cv2\nfrom blurgenerator import lens_blur\nimg = cv2.imread('test.png')\nresult = lens_blur(img, radius=5, components=4, exposure_gamma=2)\ncv2.imwrite('./output.png', result)\n```\n\n![lens blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/lens.png)\n\n- Gaussian blur\n\n`blurgenerator --type gaussian --input ./doc/test.png --output ./doc/gaussian.png`\n\n```python\nimport cv2\nfrom blurgenerator import gaussian_blur\nimg = cv2.imread('test.png')\nresult = gaussian_blur(img, 100)\ncv2.imwrite('./output.png', result)\n```\n\n![gaussian blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/gaussian.png)\n\n### With depth map\n\nFeature from this [issue](https://github.com/NatLee/Blur-Generator/issues/1).\n\n- Original image\n\n![photo](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-test.jpg)\n\n- Depth map\n\n![depth map](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-map-test.png)\n\n#### Usage\n\n- Motion blur with depth map\n\n`blurgenerator --input .\\doc\\depth-test.jpg --type motion --input_depth_map .\\doc\\depth-map-test.png --depth_num_layers 5 --depth_min_blur 1 --depth_max_blur 50 --output .\\doc\\depth-motion-output.png`\n\n```python\nimport cv2\nfrom blurgenerator import motion_blur_with_depth_map\nimg = cv2.imread('test.jpg')\ndepth_img = cv2.imread('test-depth.png')\nresult = motion_blur_with_depth_map(\n img,\n depth_map=depth_img,\n angle=30,\n num_layers=10,\n min_blur=1,\n max_blur=50\n)\ncv2.imwrite('./output.png', result)\n```\n\n![depth motion blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-motion-output.png)\n\n- Lens blur with depth map\n\n`blurgenerator --input .\\doc\\depth-test.jpg --type lens --input_depth_map .\\doc\\depth-map-test.png --depth_num_layers 3 --depth_min_blur 1 --depth_max_blur 50 --output .\\doc\\depth-lens-output.png`\n\n```python\nimport cv2\nfrom blurgenerator import lens_blur_with_depth_map\nimg = cv2.imread('test.jpg')\ndepth_img = cv2.imread('test-depth.png')\nresult = lens_blur_with_depth_map(\n img,\n depth_map=depth_img,\n components=5,\n exposure_gamma=5,\n num_layers=10,\n min_blur=1,\n max_blur=50\n)\ncv2.imwrite('./output.png', result)\n```\n\n![depth lens blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-lens-output.png)\n\n- Gaussian blur with depth map\n\n`blurgenerator --input .\\doc\\depth-test.jpg --type gaussian --input_depth_map .\\doc\\depth-map-test.png --depth_num_layers 3 --depth_min_blur 1 --depth_max_blur 50 --output .\\doc\\depth-gaussian-output.png`\n\n```python\nimport cv2\nfrom blurgenerator import gaussian_blur_with_depth_map\nimg = cv2.imread('test.jpg')\ndepth_img = cv2.imread('test-depth.png')\nresult = gaussian_blur_with_depth_map(\n img,\n depth_map=depth_img,\n sigma=5,\n num_layers=10,\n min_blur=1,\n max_blur=50\n)\ncv2.imwrite('./output.png', result)\n```\n\n![depth gaussian blur image](https://github.com/NatLee/Blur-Generator/raw/main/doc/depth-gaussian-output.png)\n\n## Contributor\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n <tbody>\n <tr>\n <td align=\"center\"><a href=\"https://github.com/NatLee\"><img src=\"https://avatars.githubusercontent.com/u/10178964?v=3?s=100\" width=\"100px;\" alt=\"Nat Lee\"/><br /><sub><b>Nat Lee</b></sub></a></td>\n </tr>\n </tbody>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\n## Reference\n\n- [Circularly symmetric convolution and lens blur](http://yehar.com/blog/?p=1495)\n\n\n## LICENSE\n\n[MIT](LICENSE)\n",
"bugtrack_url": null,
"license": null,
"summary": "Fast generate blur image.",
"version": "1.1.0",
"project_urls": {
"Bug Reports": "https://github.com/NatLee/Blur-Generator/issues",
"Documentation": "https://github.com/NatLee/Blur-Generator",
"Homepage": "https://github.com/NatLee/Blur-Generator",
"Source Code": "https://github.com/NatLee/Blur-Generator"
},
"split_keywords": [
"blur",
" generator",
" blur-image",
" cli"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6cf62b9b53e1b771ea210228828cd7e62a9ca08f26aad74b5bb1cfcc8a8c53e8",
"md5": "511479d354deabee7eb278f72b15da97",
"sha256": "ae227832c46fd486c5305aed72affb90c5cc5d1017076291e90fdabaca1fd563"
},
"downloads": -1,
"filename": "BlurGenerator-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "511479d354deabee7eb278f72b15da97",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 11091,
"upload_time": "2024-05-16T08:48:48",
"upload_time_iso_8601": "2024-05-16T08:48:48.277406Z",
"url": "https://files.pythonhosted.org/packages/6c/f6/2b9b53e1b771ea210228828cd7e62a9ca08f26aad74b5bb1cfcc8a8c53e8/BlurGenerator-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6d35231d49ae2620a686e89e0c11c394de62f7216aa6bea5a4216b2d8ad33132",
"md5": "d2717ed300a1dc280db3fdee798c514e",
"sha256": "12d852de29f0da3623eba96c76ba0b86628396553e4ec494f01c4ffc27982313"
},
"downloads": -1,
"filename": "blurgenerator-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "d2717ed300a1dc280db3fdee798c514e",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 19103444,
"upload_time": "2024-05-16T08:48:50",
"upload_time_iso_8601": "2024-05-16T08:48:50.155462Z",
"url": "https://files.pythonhosted.org/packages/6d/35/231d49ae2620a686e89e0c11c394de62f7216aa6bea5a4216b2d8ad33132/blurgenerator-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-16 08:48:50",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "NatLee",
"github_project": "Blur-Generator",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "blurgenerator"
}