赞
踩
OpenCV是一个极其庞大的库,有不可估量的函数数目。受限于类的重载函数数目和种类,内部函数互相调用之间,通常会使用接口类去做隐式类型转换,然后再去进行统一的运算处理这些类通过调用 来进行隐式转换,方便使用。
InputArray
输入只读数组传递到 OpenCV 函数的代理类OutputArray
这种类型与 非常相似,只是它用于输入/输出和输出函数参数InputArray
。InputOutputArray
继承了OutputArray,作为输入输出接口,增加了一些功能InputArrayOfArrays
类型定义InputArray
InputArrayOfArrays
OutputArrayOfArrays
类型定义OutputArray
OutputArrayOfArrays
InputOutputArrayOfArrays
类型定义OutputArray
InputOutputArrayOfArrays
Mat
本质是一个n维密集运算数组,是Matrix
的简写。相似的有,表示GPU Mat
,表示G-API
的Mat
接口。UMat
GMat
Matx
定阶矩阵类,即确定规模大小的矩阵类Vec
向量类Point
二维点类Point3
三维点类Rect
矩形类RotatedRect
旋转矩形类Range
范围类Scalar
通道类Size
规格类Mat cv::imread ( const String & filename,
int flags = IMREAD_COLOR
)
bool cv::imwrite ( const String & filename,
InputArray img,
const std::vector<int>> & params = std::vector< int >()
)
// 常用函数
VideoCapture (const String &filename, int apiPreference=CAP_ANY)
VideoCapture (int index, int apiPreference=CAP_ANY)
virtual bool open (const String &filename, int apiPreference=CAP_ANY)
virtual bool open (int index, int apiPreference=CAP_ANY)
virtual bool isOpened () const
virtual double get (int propId) const
virtual bool set (int propId, double value)
virtual void read ()
virtual void release ()
virtual VideoCapture & operator>> (const Mat &image)
void cv::imshow ( const String & winname,
InputArray mat
)
imshow函数在指定窗口中显示图像。如果窗口是使用cv::window_AUTOSIZE标志创建的,则图像将以其原始大小显示,但仍受屏幕分辨率的限制。否则,将缩放图像以适应窗口。
如果图像是8位无符号的,它将按原样显示。
-如果图像是16位无符号或32位整数,则像素除以256。也就是说,值范围[0255*256]映射到[0255]。
-如果图像是32位或64位浮点,则像素值乘以255。也就是说,值范围[0,1]映射到[0255]。若窗口是使用OpenGL支持创建的,那个么
cv::imshow
也支持ogl::Buffer
、ogl::Texture2D
和cuda::GpuMat
作为输入。
如果该窗口不是在此函数之前创建的,则假定使用cv::window\u AUTOSIZE
创建窗口。
如果需要显示大于屏幕分辨率的图像,则需要在imshow之前调用namedWindow(“,WINDOW_NORMAL”)
int cv::waitKey ( int delay = 0 )
函数
waitKey
无限期地等待一个键事件(当延迟<=0时)或延迟毫秒(当它为正时)。由于操作系统在切换线程之间有一个最小的时间间隔,因此函数不会完全延迟ms,它将至少延迟ms,这取决于当时计算机上运行的其他内容。它返回按下的键的代码,如果在指定时间之前没有按下任何键,则返回-1。此函数是HighGUI中唯一可以获取和处理事件的方法,因此需要定期调用此函数以进行正常的事件处理,除非在负责事件处理的环境中使用HighGUI。
仅当至少创建了一个HighGUI窗口且该窗口处于活动状态时,该函数才起作用。如果有多个HighGUI窗口,则其中任何一个都可以处于活动状态。
在OpenCV中,每一个图像对象被抽象成为n维矩阵,而图像对象可以是一张图片,视频里的某一帧,摄像头读取到的数据流中的一个数据部分,或者人为赋值产生的一个数据矩阵。在opencv-python中,借助了Numpy进行运算,在C++中可以使用Eigen进行运算加速。
double cv::threshold ( InputArray src,
OutputArray dst,
double thresh,
double maxval,
int type
)
此外,特殊值#THRESH_OTSU或#THRESH_TRIANGLE可与上述值之一组合。在这些情况下,函数使用大津算法或三角形算法确定最佳阈值,并使用它代替指定的阈值。
请注意,目前,大津和三角形方法仅适用于8位单通道图像。
void cv::cvtColor ( InputArray src,
OutputArray dst,
int code,
int dstCn = 0
)
该函数用于将输入图像从一个颜色空间转换为另一个颜色空间。如果从RGB颜色空间转换为,则应明确指定通道的顺序(RGB或BGR)。请注意,OpenCV中的默认颜色格式通常称为RGB,但实际上是BGR(字节颠倒)。因此,标准(24位)彩色图像中的第一个字节将是8位蓝色分量,第二个字节将是绿色,第三个字节将是红色。第四、第五和第六个字节将是第二个像素(蓝色、绿色、红色),依此类推。
在线性变换的情况下,范围并不重要。但在非线性变换的情况下,输入的RGB图像应规格化为适当的值范围,以获得正确的结果,例如RGB→ Luv*变换。例如,如果您有一个从8位图像直接转换而来的32位浮点图像,而不进行任何缩放,那么它将具有0…255值范围,而不是函数假定的0…1。因此,在调用cvtColor之前,首先需要缩小图像的比例:
img *= 1./255;
cvtColor(img, img, COLOR_BGR2Luv);
如果对8位图像使用#cvtColor,转换过程中会丢失一些信息。对于许多应用程序,这一点并不明显,但建议在需要全套颜色的应用程序中使用32位图像,或在操作前转换图像,然后再转换回图像的应用程序中使用32位图像。
如果转换添加alpha通道,其值将设置为相应通道范围的最大值:CV_8U为255,CV_16U为65535,CV_32F为1。
void cv::split ( const Mat & src,
Mat * mvbegin
)
如果需要提取单个通道或进行其他复杂的通道排列,请使用MixChannel。
如何将3通道矩阵拆分为3个单通道矩阵。
char d[] = {1,2,3,4,5,6,7,8,9,10,11,12};
Mat m(2, 2, CV_8UC3, d);
Mat channels[3];
split(m, channels);
channels[0] =
[ 1, 4;
7, 10]
channels[1] =
[ 2, 5;
8, 11]
channels[2] =
[ 3, 6;
9, 12]
void cv::merge ( const Mat* mv,
size_t count,
OutputArray dst
)
从多个单通道阵列中创建一个多通道阵列。
函数
cv::merge
将多个数组合并为一个多通道数组。也就是说,输出数组的每个元素都是输入数组元素的串联,其中第i个输入数组的元素被视为mv[i].channels()-
元素向量。
函数
cv::split
执行相反的操作。如果需要以其他高级方式裁剪排序通道,请使用cv::MixChannel
。
void cv::mixChannels ( const Mat * src,
size_t nsrcs,
Mat * dst,
size_t ndsts,
const int * fromTo,
size_t npairs
)
将指定通道从输入阵列复制到输出阵列的指定通道。
函数
cv::mixChannels
提供了一种洗牌图像通道的高级机制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。