You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于OpenCV的图像四分块后随机重组实现技术问询

实现图像四等分后随机重组

我来帮你搞定将图像分割为4块并随机重组的需求,下面是基于OpenCV的完整实现方案:

核心思路

  • 读取目标图像并获取它的高、宽及通道信息
  • 将图像均匀切割成4个大小一致的区块
  • 对这4个区块进行随机打乱排序
  • 重新拼接打乱后的区块,生成最终的重组图像

完整代码实现

import cv2
import random

# 读取图像,先做路径有效性校验
image = cv2.imread("example.jpg")
if image is None:
    raise ValueError("无法读取图像,请检查文件路径是否正确!")

height, width, channels = image.shape

# 分割图像为4个均等区块
# 用整数除法确保分割尺寸为整数,适配OpenCV的0基索引规则
half_h = height // 2
half_w = width // 2

frame_1 = image[0:half_h, 0:half_w]
frame_2 = image[0:half_h, half_w:width]
frame_3 = image[half_h:height, 0:half_w]
frame_4 = image[half_h:height, half_w:width]

# 将区块存入列表并随机打乱
frames = [frame_1, frame_2, frame_3, frame_4]
random.shuffle(frames)

# 重新拼接图像:先拼同行区块,再合并上下两行
top_row = cv2.hconcat([frames[0], frames[1]])
bottom_row = cv2.hconcat([frames[2], frames[3]])
recombined_image = cv2.vconcat([top_row, bottom_row])

# 保存结果并预览
cv2.imwrite("recombined_example.jpg", recombined_image)
cv2.imshow("Recombined Image", recombined_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

关键细节说明

  • 区块分割优化:用整数除法//替代原代码的int(height/2),避免浮点数精度问题;同时调整索引从0开始(OpenCV图像采用0基索引),确保边界像素不遗漏
  • 随机打乱逻辑:借助random.shuffle()直接对区块列表原地打乱,保证重组的随机性
  • 图像拼接方式:使用OpenCV自带的hconcat()(横向拼接)和vconcat()(纵向拼接),比手动数组索引拼接更简洁可靠,也避免了原示例中frame_1+frame_2这种像素值相加的错误操作

内容的提问来源于stack exchange,提问作者Kerem Yılmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:51:57