Opencv函数研究

来源:互联网 发布:微信三级分销系统源码 编辑:程序博客网 时间:2024/05/29 17:23

一、计算距离

double getDist(cv::Point p1, cv::Point p2){    double r = sqrt((double)((p1.x - p2.x) * (p1.x - p2.x) +                 (p1.y - p2.y) * (p1.y - p2.y)));    return r;    }
double getDistX(cv::Point p1, cv::Point p2){    double r = abs(p1.x - p2.x);    return r;}
double getDistY(cv::Point p1, cv::Point p2){    double r = abs(p1.y - p2.y);    return r;}

这里写图片描述

二、IplImage和Mat类型相互转换

Mat转为IplImage:

Mat gray_image;IplImage* image;image=&IplImage(gray_image);

IplImage转为Mat:

IplImage* pImg = cvLoadImage("***.jpg");cv::Mat img(pImg,0); 

三、图片显示

imshow( "img", img );         //MatcvWaitKey(1); 
cvShowImage( "image", image ); //IplImagecvWaitKey(1); 

四、参数类型

CvMat矩阵
参数类型CV_8UC1CV_8UC2CV_8UC3
1、2、3表示通道数

float 是32位 >> CvMat数据结构参数:CV_32FC1,CV_32FC2,CV_32FC3

double是64bits >> CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3

变换这种矩阵单位类型,Mat个函数convertTo:

void Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0 );

rtype :单位类型

cv::Mat image_YUV(image_in_BGR.rows,image_in_BGR.cols,CV_8UC1,cv::Scalar(0,0,0));cvtColor(image_in_BGR, image_YUV, CV_BGR2YUV, 0 );
cv::Mat image_YUV(image_in_1.rows,image_in_1.cols,CV_8UC1,cv::Scalar(0,0,0));imshow( "image_in_1", image_in_1 );       //MatcvWaitKey(1); cvtColor(image_in_1, image_YUV, CV_BGR2YUV, 0 );cv::Mat image_BGR(image_in_1.rows,image_in_1.cols,CV_8UC1,cv::Scalar(0,0,0));cvtColor(image_YUV, image_BGR, CV_YUV2BGR, 0 );imshow( "image_BGR", image_BGR );         //MatcvWaitKey(1); 

五、Mat - 基本图像容器

新版本opencv新的图像数据结构: Mat - 基本图像容器 ,取代旧的 CvMat 和 IplImage 。

使用时,你仅需要包含用到的头文件,比如:

#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp>

在名称之前冠以 cv:: ,或者在包含头文件后,加上以下指令:

using namespace cv;  // 新的C++接口API都在此名字空间中,需要导入

六、Mat拷贝

1、浅拷贝:
Mat B;
B = image // 第一种方式
Mat C(image); // 第二种方式
这两种方式称为浅copy,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。

2、深拷贝
Mat B,C;
B = image.clone(); // 第一种方式
image.copyTo(C); // 第二种方式
深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响。

七、Opencv显示图片单通道

分离颜色通道
多通道图像混合

vector<Mat> Channels;  Mat img_B_Ch;  Mat img_G_Ch;  Mat img_R_Ch;  split(image_in_1,Channels);    //分离色彩通道  img_B_Ch = Channels.at(0); imshow( "img_B_Ch", img_B_Ch );         //MatcvWaitKey(1); img_G_Ch = Channels.at(1); imshow( "img_G_Ch", img_G_Ch );         //MatcvWaitKey(1); img_R_Ch = Channels.at(2);  imshow( "img_R_Ch", img_R_Ch );         //MatcvWaitKey(1); //merge(Channels,image_in_1);    //合并色彩通道
0 0
原创粉丝点击