OpenCV入门学习图像遍历
Posted 小灵龙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV入门学习图像遍历相关的知识,希望对你有一定的参考价值。
简单一下数字图像的 基本概念。如 我们封面的图像,我们看到的是 一只可爱的猫咪头像,但是计算机看来这副图只一堆亮度 的头像,但是计算机看来这副图只一堆亮度 各异的点。一副尺寸为 A × B 的图像可以用一个 的图像可以用一个 A × B 的矩 阵来表示,的矩 阵来表示,阵元素的值表示这个位置上像素的亮度,像素值越大表示图像越亮。
图像模式:
1、位图模式
位图模式:photoshop使用的位图模式只使用黑白两种颜色中的一种表示图像中的像素。位图模式的图像也叫做黑白图像,它包含的信息最少,因而图像也最小。
2、灰度模式
灰度模式:用单一色调表现图像,一个像素的颜色用八位元来表示,一共可表现256阶(色阶)的灰色调(含黑和白),也就是256种明度的灰色。是从黑→灰→白的过渡,如同黑白照片。
3、双色调模式
该模式最多可向灰度图像添加4种颜色,从而可以打印出比单纯灰度更有趣的图像。
双色调模式采用2~4种彩色油墨混合其色阶来创建双色调(2种颜色)、三色调(3种颜色)、四色调(4种颜色)的图像,在将灰度图像转换为双色调模式的图像过程中,可以对色调进行编辑,产生特殊的效果.使用双色调的重要用途之一是使用尽量少的颜色表现尽量多的颜色层次,减少印刷成本。
4、RGB模式
又称为三基色,是因为在自然界中肉眼所能看到的任何色彩都可以由这三种色彩混合叠加而成,因此也称为加色模式。RGB模式又称RGB色空间。它是一种色光表色模式,它广泛用于我们的生活中,如电视机、计算机显示屏、幻灯片等都是利用光来呈色。印刷出版中常需扫描图像,扫描仪在扫描时首先提取的就是原稿图像上的RGB色光信息。RGB模式是一种加色法模式,通过R、G、B的辐射量,可描述出任一颜色。计算机定义颜色时R、G、 B三种成分的取值范围是0-255,0表示没有刺激量,255表示刺激量达最大值。R、G、B均为255时就合成了白光,R、G、B均为0时就形成了黑色,当两色分别叠加时将得到不同的“C、M、Y”颜色。。在显示屏上显示颜色定义时,往往采用这种模式。图像如用于电视、幻灯片、网络、多媒体,一般使用RGB模式。
黑白照片(灰色图)一般用二位矩阵MXN表示,而彩色照(多通道图片)用三维矩阵表示(MXNX3)。在 OpenCV 中,RGB 图像的通道顺序为 BGR 。
OpenCV中 Mat 类有三个成员变量
int dims //矩阵的维数 取值应该大于等于2
int rows,cols //矩阵的行数和列数,如果矩阵超过2维,值都为-1
opencv 代码分析
#include<opencv2\opencv.hpp>
using namespace cv;
void imageReduce(const Mat& inimage, Mat& outImage, int deep)
{
// 创建与原图像等尺寸的图像
outImage.create(inimage.size(), inimage.type()); //释放内存重新创建图像
int nrow = inimage.rows;//原图像的行
int ncol = inimage.cols*inimage.channels(); // 将多通道转换为一通道
//将图像转化为一行遍历
for (int k = 0; k<nrow; k++)
{
// 每一行图像的指针
const uchar* inData = inimage.ptr<uchar>(k);
uchar* outData = outImage.ptr<uchar>(k);
for (int i = 0; i<ncol; i++)
{
outData[i] = inData[i] /deep *deep + deep;
}
}
}
int main()
{
Mat picture = imread("cat.jpg",1);//图片必须添加到工程目录下
Mat outpict;
imageReduce(picture, outpict,120);
imshow("原图", picture);
imshow("效果图", outpict);
waitKey(20190901);
return 0;
}
编译运行效果:
以上是关于OpenCV入门学习图像遍历的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV | OpenCV实战从入门到精通系列二 -- OpenCV图像腐蚀