OpenCV读取内存数据

环境说明:

OpenCV 3.2

VS2015

Win7


#include"opencv2/core/core.hpp"

#include"opencv2/highgui/highgui.hpp"

#include

usingnamespacecv;

intmain(intargc,char**argv){

if(argc!=2){

printf("输入参数错误!");

}

FILE*f=fopen(argv[1],"rb");

if(NULL==f){

printf("open file error!");

}

unsignedchar*mImgData=(unsignedchar*)malloc(1400*1100);

if(fread(mImgData,1,1400*1100, f)==0){

printf("Fread error");

};

/*

这里矩阵的行列随便定义,但是矩阵行列乘积要足够大,

要能装下解压后的图片文件,jpg文件解压后会是原文件的N多倍,

建议使用jpg文件的宽高作为矩阵的行列。最好事先知道所读取得图片分辨率,

不然矩阵太小了,解压会失败。

*/

CvMatmCvmat=cvMat(1400,1100, CV_8UC1,mImgData);

IplImage*IpImg=cvDecodeImage(&mCvmat,1);

longgray=0;

//opencv 2.0 CvMat->Mat数据转换

//Mat b =  Mat(mat,true);

//opencv3.0 CvMat->Mat数据转换

//Mat image = cvarrToMat(pp);

cvNamedWindow("image");

cvShowImage("image", IpImg);

cvWaitKey(0);

cvReleaseImage(&IpImg);

free(mImgData);

return0;

}

### 使用 OpenCV 和 NumPy 读取图像的一行像素数据 为了实现这一目标,首先需要确保已经安装并导入了必要的 Python 库: ```python import cv2 import numpy as np ``` 接着可以利用 `cv2.imread()` 函数加载一幅图像到内存中。此函数返回一个多维数组表示该图象,其中每一行对应于原图的一个水平扫描线[^2]。 假设要获取特定位置处整行的数据,则可以通过简单的索引来完成操作。下面给出一段示范代码用于提取指定行号(例如第50行)上的所有像素值,并将其打印出来: ```python # 加载一张测试图片 img = cv2.imread('example.png') if img is None: print("Error loading image") else: # 获取图像的高度和宽度 height, width = img.shape[:2] row_index = min(49, height - 1) # 防止越界错误 # 提取出给定索引对应的那一行像素 single_row_data = img[row_index] # 输出这行的颜色信息 (B,G,R) for pixel in single_row_data: bgr_value = tuple(pixel) print(f"BGR Value: {bgr_value}") ``` 这段程序会遍历所选行内的每一个像素点,并依次显示出它们各自的蓝色、绿色及红色分量组成的元组形式的结果[^4]。 值得注意的是,在实际应用过程中应当注意边界条件检查以防止访问非法地址引发异常;另外考虑到不同平台间颜色通道排列可能存在差异(比如OpenCV采用BGR模式而其他一些工具可能是RGB),必要时还需要转换色彩空间来匹配预期输出效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值