1. 导入opencv库和其他必要的库。
import cv2
import numpy as np
import os
import random
  1. 定义函数来加载所有的图像,并将它们转换为相同的大小。
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
  1. 定义函数来创建马赛克图像。
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
  1. 加载源图像并调整其大小。
source_image = cv2.imread('source_image.jpg')
source_image = cv2.resize(source_image, (400, 400))
  1. 加载所有的图像,并使用它们创建马赛克图像。
tile_images = load_images('tiles_directory')
mosaic_image = create_mosaic_image(source_image, tile_images)
  1. 显示原始图像和马赛克图像。
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()
如何用opencv使用数量众多照片拼贴而成的马赛克图片

原文地址: http://www.cveoy.top/t/topic/bJhx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录