刚开始接触到OpenCV,本身是想学借助OpenCV的库来进行图像处理学习的,后来发现OpenCV将所有的东西都集成起来了,对于打算学习图像处理来说这样反而不是什么好事;

在我看来,图像处理基本基于对像素值的处理,那么我们尽可能的用数组来存储像素值,对于OpenCV来说不便于按照我们的做法来对图片进行处理。但是OpenCV给我们集成了cv::Mat::at这样一个结构,用于读取图片的像素值,那么我们就可以使用它来将像素值存储在数组中了。

image.at<Vec3b>(row, col)[i]可以读取到图片中的像素值,row为行、col为列、i为RGB的第几通道。

for (int row = 0; row < image.rows; row++)      //行{for (int col = 0; col < image.cols; col++)  //列{for (int i = 0; i < 3; i++){str[row * 400 * 3 + col * 3 + i] = image.at<Vec3b>(row, col)[i];}}}

这样我们就可以将image图片中的像素值保存到str数组中,我们采用的是三通道RGB图片,在数组中的存储顺序是B,G,R。

但是这里有个缺陷就是我们需要首先数组的长度,那么就意味着对应的图片长宽是固定的。

对于之后的图像显示,我仍然使用了能被openCV处理的Mat格式图像数据,就是对指向图像的指针生成Mat格式的图像数据。

int fnCameraCheckA(unsigned char* imageData, int width, int height, int *result1)
{Mat img(height, width, CV_8UC3, imageData);  //CV_8UC3:8位无符号的三通道---RGB彩色图像if (!img.data){printf(" No image data \n ");return -1;}imshow("传递过来的图像", img);*result1 = 1;return 1;
}

这样我们就可以随意的对图片进行处理,并借助OpenCV强大的底层库进行其他操作。

#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cstring>using namespace cv;int fnCameraCheckA(unsigned char* imageData, int width, int height, int * result);int main(int argc, char** argv)
{const char* imageName = "test_2.bmp";Mat image;image = imread(imageName);     //读图片char str[400 * 400 * 3];for (int row = 0; row < image.rows; row++)      //行{for (int col = 0; col < image.cols; col++)  //列{for (int i = 0; i < 3; i++){str[row * 400 * 3 + col * 3 + i] = image.at<Vec3b>(row, col)[i];}}}char* imgData = str;imshow("原图", image);int width, height;int a = -1;int *result1 = &a;   //判断是否传递成功width = image.cols;  // 列数height = image.rows; // 行数//  利用传递过来的图像指针和行列参数,生成能被openCV处理的Mat格式图像数据fnCameraCheckA((unsigned char*)imgData, width, height, result1);if (*result1 == 1){printf("图像传递successful!!");}waitKey(0);return 0;
}int fnCameraCheckA(unsigned char* imageData, int width, int height, int *result1)
{Mat img(height, width, CV_8UC3, imageData);  //CV_8UC3:8位无符号的三通道---RGB彩色图像if (!img.data){printf(" No image data \n ");return -1;}imshow("传递过来的图像", img);*result1 = 1;return 1;
}

OpenCV像素二位数组数据(矩阵)生成图片相关推荐

  1. C++创建二维数组和矩阵

    参考: http://bbs.csdn.net/topics/330125254 http://see.xidian.edu.cn/cpp/biancheng/view/44.html 必须让电脑知道 ...

  2. php 二位数组去掉重复,PHP 二维数组去掉重复值并保持原结构

    PHP 二维数组去掉重复值并保持原结构 直接上代码,解释很详细 //二维数组去掉重复值 function arrunique($a){ foreach($a[0] as $k => $v){ / ...

  3. 二维数组练习--矩阵的加法和乘法

    数组的练习示例展示: package arrayList; /*** 矩阵的集中运算法则:求和,求积,求逆矩阵,转置矩阵......* @author Drew**/ public class Arr ...

  4. 关于一维数组和二位数组的数组指针

    1. 一维数组            c语言中, 数组占用的空间是一组连续的物理内存空间. 所以对于1维数组来讲,只需要知道数组头1个元素的地址, 就可以逐个地得出各个元素的值了. 例子:       ...

  5. 用二维数组实现矩阵转置

    实例说明: 这里给出两套源码. 自己写的: 1 /** 2 * Copyright (c) 1991 - 2016 Arvin Tang. 3 * All rights reserved. 4 * 5 ...

  6. PHP中 如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变...

    如何将二位数组按某一个或多个字段值(升序/降序)排序?数字索引被重置,关联索引保持不变 1.$arr=array( 2. array('id'=>1,'name'=>'will','age ...

  7. matlab怎么输入二维数组,MATLAB二维数组(矩阵)的创建

    MATLAB 二维数组与矩阵之间有很大的相关性,二维数组是由实数或复数排列成矩形构成的,而且从数据结构上看,矩阵和二维数组没有区别. 本节将讲解 MATLAB 二维数组的两种创建方式. 直接输入 矩阵 ...

  8. 数据结构5.1二维数组与矩阵乘法

    二维数组的定义可以采用静态和动态两种,静态数组是在定义的时候就知道了整个二维所需要的空间.在实际应用中大多利用动态数组,灵活度高,不用提前知道矩阵的大小,但在有些情况下,静态数组会更加方便直白.矩阵相 ...

  9. 6-2 编写Matrix类,使用二维数组实现矩阵,实现两个矩阵的乘法。 (30分) java pta

    编写程序题, 根据要求编写一个Java类,补充到代码中. 定义Matrix(矩阵)类,使用二维数组实现矩阵,实现两个矩阵的乘法.要求如下: 4个变量:row(行数),column(列数), matri ...

最新文章

  1. 浅谈AJAX并实现使用pagehelper-5.1.10.jar分页插件实现异步从数据库中获取数据分页显示
  2. 阿里高级技术专家张建飞:深度剖析领域模型vs数据模型的用法
  3. 2018.6.5今天跟着视频做了一个提交Todolist
  4. 关于打印数组一直输出地址符号的一个解决方法
  5. 想知道账号被封的感觉么?
  6. ssh之雇员管理系统(7)-spring可以启用注解的方式来配置属性+解决懒加载问题...
  7. 最新小说免费API--书香楼,每日不断更新
  8. stm32软件模拟i2c通讯读取lm75a温度
  9. 10^5以下素数筛法——素数表法
  10. 现在大多数论文存在的弊病——可重复性
  11. LED显示行业之闪烁现象
  12. HWDB1.1数据集 | 手写汉字数据集 |.gnt 转换 .png格式图片| 【❤️有效转换❤️】
  13. typora 配置 smms 图床
  14. 微信小程序 wx.previewImage 预览分享图片结束之后 执行事件
  15. 具有系统权限的apk的安装和系统签名
  16. 6、网关 复杂分支流程
  17. 安卓UI自动化工具4399AT环境搭建
  18. 给textView设置文字渐变色
  19. fastadmin html js记录一次<input type=““checkbox“ 不选中表单不提交字段问题
  20. 计算机带不起大型游戏怎么回事,电脑玩不起来大型网络游戏怎么办

热门文章

  1. PHP命名空间带来的干扰
  2. java activemq 断线_activemq 长时间没有消息client会断开吗?
  3. android studio开发个人备忘录算法设计_Android Studio 4.1 发布,全方位提升开发体验...
  4. System Verilog自学笔记专栏概述博文目录
  5. 状态机(FSM)的介绍--以检测序列1001为例
  6. c语言怎么储存字母,c语言怎么用变量存储中文字符?书本上面没有的秘密
  7. 远程调试Eclipse插件的设置
  8. IE下,拖动grid的分隔栏,报getBoundingClientRect错误解决办法
  9. 【问】如何应对关系型数据库中列的不断增加
  10. 轻松解决idea一直卡在Resolving Maven dependencies的问题