Python&OpenCV - 随机生成图像 与 图像的转维(reshape)

本文介绍如何利用Python和OpenCV库生成随机图像,并通过reshape函数将其从一维转换为二维(灰度图像)或三维(彩色图像)。代码示例包括输出灰度图像和彩色图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随机生成图像 与 图像的转维(reshape)

本文地址: http://blog.youkuaiyun.com/caroline_wendy/article/details/17062379

OpenCV可以支持Python版本;

通过Python的标准库, os.urandom(), 随机生成uchar数, 然后传递给OpenCV的矩阵;

通过reshape()函数, 把1维变成2维(灰度图像), 把1维变成3维(彩色图像);

注意: "-*- coding: utf-8 -*-"可以UTF-8编码, 可以使用中文注释; 输出灰度和彩色;

代码如下:

# -*- coding: utf-8 -*-

#=================
#File: PyOpenCV.py
#Author: Wendy
#=================

import cv2
import numpy
import os

#随机生成120000=300*400=100*400*3
randomByteArray = bytearray(os.urandom(120000))
#把数组赋值给OpenCV类型矩阵
flatNumpyArray = numpy.array(randomByteArray)

#矩阵变维, 1维变维2维(灰度), 1维变为3维(彩色)
grayImage = flatNumpyArray.reshape(300, 400)
bgrImage = flatNumpyArray.reshape(100, 400, 3)

#显示
cv2.imshow("GRAY", grayImage)
cv2.imshow("BGR", bgrImage)
cv2.waitKey(0)


输出:


### 如何使用PythonOpenCV实现全景图像拼接 #### 准备工作 为了能够顺利地完成图像的拼接操作,需要先安装必要的库。可以通过pip工具来安装`opencv-python`以及`numpy`这两个主要依赖包。 ```bash pip install opencv-python numpy ``` #### 实现过程详解 ##### 加载图片并初始化列表存储待处理的图像数据 创建一个函数用于加载一系列输入图像,并将其换为灰度模式以便后续特征检测算法更好地运行[^1]。 ```python import cv2 import numpy as np def load_images(image_paths): images = [] for path in image_paths: img = cv2.imread(path) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) images.append(gray) return images ``` ##### 特征点检测描述符计算 采用SIFT算子提取每幅图像的关键点及其对应的局部不变量描述向量。需要注意的是,在某些版本的OpenCV中可能需要额外配置才能启用非自由版权的功能模块(如SIFT)。这里假设已经正确设置了环境变量或通过其他方式解决了这个问题[^2]。 ```python sift = cv2.SIFT_create() keypoints_list = [] descriptors_list = [] for img in images: kp, des = sift.detectAndCompute(img, None) keypoints_list.append(kp) descriptors_list.append(des) ``` ##### 进行两两之间的特征匹配 对于相邻两张照片之间找到足够数量的良好配对关系之后就可以尝试构建单应矩阵来进行几何变换了。FLANN基于KD树结构可以快速有效地查找最近邻近似解从而提高效率。 ```python index_params = dict(algorithm=1, trees=5) search_params = dict(checks=50) flann = cv2.FlannBasedMatcher(index_params, search_params) matches_lists = [] for i in range(len(images)-1): matches = flann.knnMatch(descriptors_list[i], descriptors_list[i+1], k=2) good_matches = [m for m,n in matches if m.distance < 0.7*n.distance] matches_lists.append(good_matches) ``` ##### 计算单应性矩阵并执行透视变换 一旦获得了足够的可靠对应点集,则可通过RANSAC随机抽样一致性方法估计出最佳拟合模型参数——即单应性矩阵H;接着应用此矩阵将右图映射到左图坐标系下形成最终合成的大视场角画面。 ```python result_image = None for idx, (kp1, kp2) in enumerate(zip(keypoints_list[:-1], keypoints_list[1:])): src_pts = np.float32([kp1[m.queryIdx].pt for m in matches_lists[idx]]).reshape(-1, 1, 2) dst_pts = np.float32([kp2[m.trainIdx].pt for m in matches_lists[idx]]).reshape(-1, 1, 2) H, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0) height, width = images[idx].shape[:2] transformed_img = cv2.warpPerspective(images[idx+1], H, (width * 2, height)) if result_image is None: result_image = cv2.addWeighted(transformed_img, 0.5, images[idx], 0.5, 0) else: result_image = cv2.addWeighted(transformed_img, 0.5, result_image, 0.5, 0) ``` 最后保存生成的结果文件: ```python cv2.imwrite('panorama_result.jpg', result_image) ``` 上述流程展示了基本原理和技术细节,实际项目开发过程中还需要考虑更多因素比如异常情况下的鲁棒性增强措施等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值