读取图片,在图片指定范围内随机打点,并批量保存被打点图片
时间: 2024-03-27 14:40:03 浏览: 13
好的,这个任务可以使用Python的Pillow库来完成。以下是一个简单的代码示例,可以完成这个任务:
```python
from PIL import Image
import random
# 打开图片
img = Image.open('image.jpg')
# 设置打点范围
x_min, y_min, x_max, y_max = 100, 100, 200, 200
# 设置打点数量
num_points = 10
# 随机打点
for i in range(num_points):
x = random.randint(x_min, x_max)
y = random.randint(y_min, y_max)
img.putpixel((x, y), (0, 0, 0)) # 在指定位置打点,这里的(0, 0, 0)表示黑色
# 保存被打点的图片
img.save(f'output_{i}.jpg')
```
这个代码首先打开了一张名为'image.jpg'的图片。然后设置了打点的范围和数量,使用random库随机生成打点的位置,使用putpixel()方法在图片上打点,并使用save()方法保存被打点的图片。最终将保存10张被打点的图片,分别命名为'output_0.jpg'到'output_9.jpg'。
相关问题
python cv2 实现 读取图片,在图片指定范围内随机打点,并批量保存被打点图片
您可以按照以下步骤实现您的需求:
1. 引入必要的库和函数:
```python
import cv2
import numpy as np
import os
```
2. 定义读取图片函数:
```python
def read_image(image_path):
image = cv2.imread(image_path)
return image
```
3. 定义打点函数:
```python
def draw_random_points(image, n_points, x_range, y_range):
for i in range(n_points):
x = np.random.randint(x_range[0], x_range[1])
y = np.random.randint(y_range[0], y_range[1])
cv2.circle(image, (x, y), 1, (0, 0, 255), -1)
return image
```
其中,参数 `n_points` 表示要在图片中打多少个点,`x_range` 和 `y_range` 分别表示点的横坐标和纵坐标的范围。
4. 定义批量保存函数:
```python
def save_images(images, output_dir):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for i, image in enumerate(images):
output_path = os.path.join(output_dir, f"{i+1}.jpg")
cv2.imwrite(output_path, image)
```
其中,参数 `images` 表示要保存的图片列表,`output_dir` 表示保存的目录。
5. 主函数中读取图片、打点并保存:
```python
if __name__ == '__main__':
image_path = "test.jpg"
output_dir = "output"
n_points = 100
x_range = (100, 300)
y_range = (200, 400)
image = read_image(image_path)
images = []
for i in range(10):
new_image = draw_random_points(image.copy(), n_points, x_range, y_range)
images.append(new_image)
save_images(images, output_dir)
```
其中,`image_path` 表示要读取的图片路径,`output_dir` 表示保存的目录,`n_points` 表示要在每张图片中打多少个点,`x_range` 和 `y_range` 分别表示点的横坐标和纵坐标的范围。上述代码中,我们将在一张图片中打 100 个点,重复 10 次并保存。您可以根据自己的需求进行修改。
读取图片,在图片指定范围内随机打点
好的,您可以使用Python的PIL库来读取图片并在指定范围内随机打点。
以下是示例代码:
```python
from PIL import Image, ImageDraw
import random
# 打开图片
img = Image.open('image.jpg')
# 获取图片的宽度和高度
width, height = img.size
# 创建一个新的ImageDraw对象
draw = ImageDraw.Draw(img)
# 定义打点的范围
x_min, y_min = int(width/4), int(height/4)
x_max, y_max = int(width*3/4), int(height*3/4)
# 在范围内随机打点
for i in range(50):
x = random.randint(x_min, x_max)
y = random.randint(y_min, y_max)
draw.point((x, y), fill=(255, 0, 0))
# 显示图片
img.show()
```
这段代码会打开一张名为"image.jpg"的图片,然后在图片的中心随机打50个红色的点。您可以根据需要修改打点的范围和数量。