Opencv函数研究

一、计算距离

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 );         //Mat
cvWaitKey(1); 
cvShowImage( "image", image ); //IplImage
cvWaitKey(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 );       //Mat
cvWaitKey(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 );         //Mat
cvWaitKey(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 );         //Mat
cvWaitKey(1); 

img_G_Ch = Channels.at(1); 

imshow( "img_G_Ch", img_G_Ch );         //Mat
cvWaitKey(1); 

img_R_Ch = Channels.at(2);  

imshow( "img_R_Ch", img_R_Ch );         //Mat
cvWaitKey(1); 

//merge(Channels,image_in_1);    //合并色彩通道
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值