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();
函数是用来绘制一个矩形(框)的,通常用在图片的标记上
//定义1
CV_EXPORTS_W void rectangle(InputOutputArray img, Point pt1, Point pt2,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
参数 | 说明 |
img | 被处理的图像 |
pt1 | 绘制矩形的左上点坐标 |
pt2 | 绘制矩形的右下点坐标 |
color | 颜色 Scalar(255,255,0) |
thickness | 矩形框的线条宽度 详看#FILLED |
lineType | 线型 默认 LINE_8, 详看#LineTypes |
shift | 移位点坐标中的小数位数 |
例1rectangle(img2, Point(j,i), Point(j + img4.cols, i + img4.rows), Scalar(255, 255, 0), 2, 8);
//定义2
CV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,
const Scalar& color, int thickness = 1,int lineType = LINE_8,
int shift = 0);
参数说明
1.
参数 | 说明 |
img | 被处理的图像 |
rec | Rect()函数 |
color | 颜色 Scalar(255,255,0) |
thickness | 矩形框的线条宽度 |
lineType | 线型 默认 LINE_8, 详看#FILLED |
shift | 移位点坐标中的小数位数 |
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);//色彩空间转换函数2021-12-24
void mat_creation_demo(Mat &image);//Mat对象与创建2021-12-27
void pixel_vist_Demo(Mat &image);//图像像素的读写操作2022-1-3
void operators_demo(Mat &image);//图像像素的算数操作2022-1-4
void tracking_bar_demo(Mat &image);//滚动条操作演示2022-1-7
void key_demo(Mat &image);//键盘响应操作2022-1-12
void color_style_demo(Mat &image);//OpenCV自带颜色表操作2022-1-12
void bitwise_demo(Mat &image);//位操作(逻辑操作)2022-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);//显示结果1
imshow("m2", m2);//显示结果2
//位操作
Mat dst;
//bitwise_and(m1, m2, dst);//与
//显示结果3
//bitwise_or(m1, m2, dst);//或
//显示结果4
//bitwise_not(m1,dst);//非 取反操作
//显示结果5
bitwise_xor(m1,m2,dst);//异或
//显示结果6
imshow("像素位操作", 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