卓航论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 334|回复: 3
打印 上一主题 下一主题

OpenCV 矩阵:图像的基本

[复制链接]
[至尊红钻5级]发帖数量≥8000篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [至尊紫钻4级]金币≥20000个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 论坛元老
 UID:  7   [未点亮普号显示]钻石不足3个
 阁 分: 36567
 阁 望: 0
 阁 献: 0
 活 跃: 0
 发 贴: 12405 (0)
 阁 币: 24162  
性 别: I'm 火星人!
阅读权限: 90
在线时长: 0 小时
注册时间: 2016-10-16
最后登录: 2016-10-18
go
楼主
发表于 2016-10-17 15:39:29 |只看该作者 |倒序浏览
本帖发表于 2016-10-17 15:39:29...阅读 335 人...加油,亲爱的楼主:[db:作者]
我们有很多方式可以从现实生活中得到图片,数码相机,扫描仪,或者我们几乎人手有一部的手机。然而,当生活中的图在数字设备上存储的时候,一幅图片被分成了很多很多的像素点,像素点就像拼图的时候的碎片,一个个碎片来构成一副图。而每个像素点都是由一个0-255的数字值来表示。在openCV中,一个图片被很多像素点表示,这些表示像素点的值构成了一个矩阵。

上面的图中,由表示像素点的值构成了矩阵,在openCV中,Mat(矩阵)是表示图片的基本。
Mat由两部分组成,一个是matrixheader,里面存储了一些信息,比如矩阵的大小,矩阵的存储地址等;另外一个是矩阵,里面包含了图片的每一个像素值。
明白了Mat有两部分组成后,能够更好的理解Mat的赋值。看下面的一段代码
#include  
#include   
#include   
      
using namespace cv;  
      
int main()  
{  
    Mat A, C;                                // 声明其实只是创建了header部分  
    A = imread("zh.png",CV_LOAD_IMAGE_COLOR); // 这里,A的matrix部分指向了一个矩阵  
      
    Mat B(A);                                // 使用构造方法赋值,其实只有header部分复制了,  
                                                //但是matrix复制的是地址空间,指向的是同一片区域  
      
    C = A;                                    // 同理,header部分复制了,但是matrix指向同一片区域  
    //A = A * 0;  //只是改变了A,但是三幅图都变了  
    imshow("A", A); //显示的三幅图片都是同一片区域  
    imshow("B", B);  
    imshow("C", C);  
    waitKey();  
    return 0;  
}
上面的A,B,C的header只是值相同,但是每一个Mat都有自己的header,但是matrix不一样,他们不仅仅值相同,并且指向相同的地址空间。
现在你可能会疑惑,如果三个Mat的matrix都是同一片地址空间,那么当它不再需要的时候,由谁来清除它。其实由最后一个使用它的那个Mat来清除,这里面涉及的引用计数问题,和C++的引用计数应该是相似的。
如果我们需要一个和原来矩阵值一样,但是原来Mat的改变不会影响新的Mat。解决这个,openCV提供了clone() 和copyTo() 这两个函数。
Mat F = A.clone();  
Mat G;  
A. copyTo(G);
上面的G和F,现在的值和A一样,但是A的改变不会影响到他们。
存储的方式:
就是如何存储像素值,最简单的方式是用灰度矩阵来存储,前提是我们的图片是黑白的时候,当然还有一些其它的图片存储方式,比如常见的RGB。
               
显示的创建Mat:
可以使用imwrite()将图片写出,也可以使用
Mat的构造函数,前两个参数(这里都是2)指定Mat的大小,行与列数。
定义“CV_8UC3”的格式一般是这样的
CV_[The number of bits per item][Signed orUnsigned][Type Prefix]C[The channel number]
例如,CV_8UC3意思是我们用8 bitunsigned值表示单个数值,每个像素有3个数值来形成3个channel。

使用create()函数创建。   
Mat M;  
M.create(4, 4, CV_8UC(2)); //参数的含义前面已经介绍了  
cout

返回栏目页:http://www.bianceng.cn/Programming/cplus/
Matlab风格,使用zeros(),ones(),eye(),
Mat E = Mat::eye(4, 4, CV_64F);  
cout

小矩阵,可以用这种方式初始化:
Mat C = (Mat_(3, 3)

可以使用randu()函数,随机化一个矩阵,需要给定一个随机的上下界
Mat R = Mat(3, 2, CV_8UC3);  
randu(R, Scalar::all(0),Scalar::all(255)); //0至255的值  
cout

作者:csdn博客 钟桓
分享到: QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏0 支持支持0 反对反对0

使用道具 举报

[至尊红钻3级]发帖数量≥1000篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [未点亮至尊紫钻]金币不足100个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 金牌会员
 UID:  2   [未点亮普号显示]钻石不足3个
 阁 分: 1290
 阁 望: 0
 阁 献: 0
 活 跃: 0
 发 贴: 1285 (0)
 阁 币: 5  
性 别: I'm 火星人!
阅读权限: 70
在线时长: 0 小时
注册时间: 2016-10-14
最后登录: 2016-10-18
沙发
发表于 2016-10-18 00:05:18 |只看该作者
本回复帖发表于 2016-10-18 00:05:18,感谢hjghjgj对本帖的认真回复,你的回复是对楼主莫大的鼓舞
沙发!沙发!

使用道具 举报

[至尊红钻2级]发帖数量≥100篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [未点亮至尊紫钻]金币不足100个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 注册会员
 UID:  67   [未点亮普号显示]钻石不足3个
 阁 分: 158
 阁 望: 2
 阁 献: 9
 活 跃: 0
 发 贴: 140 (0)
 阁 币: 5  
性 别: I'm 火星人!
阅读权限: 20
在线时长: 5 小时
注册时间: 2011-1-6
最后登录: 2016-10-21
板凳
发表于 2016-10-19 13:40:14 |只看该作者
本回复帖发表于 2016-10-19 13:40:14,感谢luckyboy123对本帖的认真回复,你的回复是对楼主莫大的鼓舞
路过,学习下

使用道具 举报

[至尊红钻2级]发帖数量≥100篇 [未点亮至尊黄钻]威望不足10点 [未点亮至尊蓝钻]在线时间不足10小时 [未点亮至尊绿钻]贡献度不足10点 [未点亮至尊紫钻]金币不足100个 [未点亮至尊粉钻]精华贴数不足10贴 [未点亮至尊黑钻]活跃不足8个
 等级: 
 级别: 中级会员
 UID:  51   [未点亮普号显示]钻石不足3个
 阁 分: 205
 阁 望: 5
 阁 献: 3
 活 跃: 0
 发 贴: 182 (0)
 阁 币: 10  
性 别: I'm 火星人!
阅读权限: 30
在线时长: 5 小时
注册时间: 2011-1-6
最后登录: 2016-10-21
地板
发表于 2016-10-21 08:46:08 |只看该作者
本回复帖发表于 2016-10-21 08:46:08,感谢wangxuejing1109对本帖的认真回复,你的回复是对楼主莫大的鼓舞
学习了,谢谢分享、、、

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、每个贴内连续回复请勿多余3贴,每个版面回复请勿多余10贴!
4、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!

手机版| 百度搜索:vkee.pw

2012-2015 卓航旗下 GMT+8, 2024-5-18 20:40 , Processed in 0.537615 second(s), 30 queries . Powered by Discuz! X3.2  

禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.如遇版权问题,请及时联系站长(QQ:5213513)

今天是: | 本站已经安全运行: //这个地方可以改颜色

快速回复 返回顶部 返回列表