class Rect
成员变量有 x y width heigh
x y 表示左上角的坐标 width heigh 矩形的宽和高
成员函数Size Size()
面积 area()
contain(Point) 判断Point 是否在矩形内
inside(Rect) 判断矩形是否在矩形内
ti() 返回左上角坐标
br() 返回右上角坐标
Rect rect = rect1 & rect2 返回两矩阵的交集
Rect rect = rect1 | rect2返回两矩阵的并集
Mat srcImage(600,800,CV_8UC3)
一般的图像文件格式使用的是 Unsigned char 8bits吧,
CvMat矩阵对应的参数类型就是
CV_8UC1,CV_8UC2,CV_8UC3。
(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)
而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3...
double是64bits,对应CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3等。
变换这种矩阵单位类型,Mat里有一个函数convertTo可以办到:
C++:void Mat::convertTo(OutputArray m, int rtype, double alpha=1, double beta=0 )
mask.convertTo(OutputArray m, CV_8UC3, -1.0, 255.0); // inverse the mask matrix means I_new(x,j) = -1*I(x,j) + 255
RNG 表示产生随机数
转载:毛星云 opencv3 编程入门3.3鼠标操作
#include <opencv2/opencv.hpp>
using namespace cv;
#define WINDOW_NAME "[程序窗口]"
#define PIC "D:\\111.jpg"
void on_MouseHandle(int event,int x,int y,int flags,void* param);
void DrawRectangle(cv::Mat& img,cv::Rect box);
void ShowHelpText();
Rect g_rectangle;
bool g_bDrawingBox = false;
RNG g_rng(12345);
int main(int argc, char** argv)
{
g_rectangle = Rect(-1,-1,0,0);
Mat srcImage(600,800,CV_8UC3),tempImage;
srcImage.copyTo(tempImage);
srcImage = Scalar::all(0);
namedWindow(WINDOW_NAME);
setMouseCallback(WINDOW_NAME,on_MouseHandle,(void*)&srcImage);
while(true)
{
srcImage.copyTo(tempImage);
if(g_bDrawingBox)
DrawRectangle(tempImage,g_rectangle);
//当进行绘制的标识符为真,则进行绘制
imshow(WINDOW_NAME,tempImage);
if(waitKey(10)==27)
break;
}
return 0;
}
void on_MouseHandle(int event,int x,int y,int flags,void* param)
{
Mat& image = *(cv::Mat*)param;
switch(event)
{
case EVENT_MOUSEMOVE:
{
if(g_bDrawingBox)
{
g_rectangle.width = x- g_rectangle.x;
g_rectangle.height = y - g_rectangle.y;
}
}break;
case EVENT_LBUTTONDOWN:
{
g_bDrawingBox = true;
g_rectangle = Rect(x,y,0,0);
}
break;
case EVENT_LBUTTONUP:
{
g_bDrawingBox = false;
if(g_rectangle.width < 0)
{
g_rectangle.x += g_rectangle.width;
g_rectangle.width *= -1;
}
if(g_rectangle.height < 0)
{
g_rectangle.y +=g_rectangle.height;
g_rectangle.height*= -1;
}
DrawRectangle(image,g_rectangle);
}
break;
}
}
void DrawRectangle(cv::Mat& img,cv::Rect box)
{
rectangle(img,box.tl(),box.br(),Scalar(g_rng.uniform(0,255),g_rng.uniform(0,255),g_rng.uniform(0,255)));
}