如何用opencv使用数量众多照片拼贴而成的马赛克图片
- 导入opencv库和其他必要的库。
import cv2
import numpy as np
import os
import random
- 定义函数来加载所有的图像,并将它们转换为相同的大小。
def load_images(directory):
images = []
for filename in os.listdir(directory):
if filename.endswith(".jpg") or filename.endswith(".png"):
img = cv2.imread(os.path.join(directory, filename))
if img is not None:
img = cv2.resize(img, (50, 50))
images.append(img)
return images
- 定义函数来创建马赛克图像。
def create_mosaic_image(source_image, tile_images):
height, width = source_image.shape[:2]
mosaic_image = np.zeros((height, width, 3), np.uint8)
for y in range(0, height, 50):
for x in range(0, width, 50):
tile_image = random.choice(tile_images)
mosaic_image[y:y+50, x:x+50] = tile_image
return mosaic_image
- 加载源图像并调整其大小。
source_image = cv2.imread('source_image.jpg')
source_image = cv2.resize(source_image, (400, 400))
- 加载所有的图像,并使用它们创建马赛克图像。
tile_images = load_images('tiles_directory')
mosaic_image = create_mosaic_image(source_image, tile_images)
- 显示原始图像和马赛克图像。
cv2.imshow('Source Image', source_image)
cv2.imshow('Mosaic Image', mosaic_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
完整代码:
import cv2
import numpy as np
import os
import random
def load_images(directory):
images = []
for filename in os.listdir(directory):
if filename.endswith(".jpg") or filename.endswith(".png"):
img = cv2.imread(os.path.join(directory, filename))
if img is not None:
img = cv2.resize(img, (50, 50))
images.append(img)
return images
def create_mosaic_image(source_image, tile_images):
height, width = source_image.shape[:2]
mosaic_image = np.zeros((height, width, 3), np.uint8)
for y in range(0, height, 50):
for x in range(0, width, 50):
tile_image = random.choice(tile_images)
mosaic_image[y:y+50, x:x+50] = tile_image
return mosaic_image
source_image = cv2.imread('source_image.jpg')
source_image = cv2.resize(source_image, (400, 400))
tile_images = load_images('tiles_directory')
mosaic_image = create_mosaic_image(source_image, tile_images)
cv2.imshow('Source Image', source_image)
cv2.imshow('Mosaic Image', mosaic_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
原文地址: http://www.cveoy.top/t/topic/bJhx 著作权归作者所有。请勿转载和采集!