OpenCV 学习笔记
day10-图像像素的逻辑操作1. 画矩形函数rectangle();Rect()函数是画出图像中的矩形2. 位操作函数bitwise_and(m1, m2, dst);//与bitwise_or(m1, m2, dst);//或bitwise_not(m1,dst);//非 取反操作bitwise_xor(m1,m2,dst);//异或代码显示效果day10-图像像素的逻辑操作
1. 画矩形
函数
rectangle();
函数是用来绘制一个矩形(框)的,通常用在图片的标记上
//定义1CV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);
例1
rectangle(img2, Point(j,i), Point(j + img4.cols, i + img4.rows), Scalar(255, 255, 0), 2, 8);
//定义2CV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,const Scalar& color, int thickness = 1,int lineType = LINE_8, int shift = 0);
参数说明
1.
Rect()函数是画出图像中的矩形
Rect()(int x, int y, int width, int height);
参数含义:
Rect(左上角x坐标 , 左上角y坐标,矩形的宽,矩形的高)
例2
rectangle(m1,Rect(100,100,80,80),Scalar(255,255,0),-1,LINE_8,0);
例3
Rect(100,100,80,80);//左上角坐标 x,y(100,100) //size 80*80
补充:
//如果创建一个Rect对象rect(100, 50, 50, 100),那么rect会有以下几个功能: rect.area();//返回rect的面积 5000 rect.size();//返回rect的尺寸 [50 × 100] rect.tl(); //返回rect的左上顶点的坐标 [100, 50] rect.br(); //返回rect的右下顶点的坐标 [150, 150] rect.width(); //返回rect的宽度 50 rect.height(); //返回rect的高度 100 rect.contains(Point(x, y)); //返回布尔变量,判断rect是否包含Point(x, y)点 //还可以求两个矩形的交集和并集 rect = rect1 & rect2; rect = rect1 | rect2; //还可以对矩形进行平移和缩放 rect = rect + Point(-100, 100); //平移,也就是左上顶点的x坐标-100,y坐标+100 rect = rect + Size(-100, 100); //缩放,左上顶点不变,宽度-100,高度+100 //还可以对矩形进行对比,返回布尔变量 rect1 == rect2; rect1 != rect2;
2. 位操作
函数
bitwise_and(m1, m2, dst);//与
bitwise_or(m1, m2, dst);//或
bitwise_not(m1,dst);//非 取反操作
bitwise_xor(m1,m2,dst);//异或
代码
quickopencv.h
#pragma once#include <opencv2\highgui.hpp>#include <opencv2\imgproc.hpp>using namespace cv;//定义类class QuickDemo{public:void colorSpace_Demo(Mat &image);//色彩空间转换函数-12-24void mat_creation_demo(Mat &image);//Mat对象与创建-12-27void pixel_vist_Demo(Mat &image);//图像像素的读写操作-1-3void operators_demo(Mat &image);//图像像素的算数操作-1-4void tracking_bar_demo(Mat &image);//滚动条操作演示-1-7void key_demo(Mat &image);//键盘响应操作-1-12void color_style_demo(Mat &image);//OpenCV自带颜色表操作-1-12void bitwise_demo(Mat &image);//位操作(逻辑操作)-1-17};
QuickDemo.cpp
#include <opencv2\highgui.hpp>#include <opencv2\imgproc.hpp>#include<quickopencv.h>#include <iostream>void QuickDemo::bitwise_demo(Mat &image){//画矩形Mat m1 = Mat::zeros(Size(256, 256), CV_8UC3);Mat m2 = Mat::zeros(Size(256, 256), CV_8UC3);rectangle(m1,Rect(100,100,80,80),Scalar(255,255,0),-1,LINE_8,0);rectangle(m2, Rect(150, 150, 80, 80), Scalar(0, 255, 255), -1, LINE_8, 0);imshow("m1", m1);//显示结果1imshow("m2", m2);//显示结果2//位操作Mat dst;//bitwise_and(m1, m2, dst);//与//显示结果3//bitwise_or(m1, m2, dst);//或//显示结果4//bitwise_not(m1,dst);//非 取反操作//显示结果5bitwise_xor(m1,m2,dst);//异或//显示结果6imshow("像素位操作", dst);}
OpencvTest.cpp
#include <iostream>#include <opencv2\highgui.hpp>#include <opencv2\imgproc.hpp>#include<quickopencv.h>using namespace cv;using namespace std;int main(){QuickDemo qd;qd.bitwise_demo(scr);waitKey(0);return 0;}
显示效果
显示结果1
显示结果2
显示结果3
显示结果4
显示结果5
显示结果6
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)