OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)

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. 画矩形

函数

  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 移位点坐标中的小数位数

例1
rectangle(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 移位点坐标中的小数位数
  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. 位操作

函数

  1. bitwise_and(m1, m2, dst);//与

  2. bitwise_or(m1, m2, dst);//或

  3. bitwise_not(m1,dst);//非 取反操作

  4. bitwise_xor(m1,m2,dst);//异或

代码

quickopencv.h

#pragma once

#include 

#include 

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 

#include 

#include

#include 

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 
#include 
#include 
#include

using namespace cv;
using namespace std;


int main()
{
	QuickDemo qd;
	qd.bitwise_demo(scr);
	waitKey(0);
	return 0;
}

显示效果

显示结果1
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)_第1张图片
显示结果2
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)_第2张图片
显示结果3
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)_第3张图片
显示结果4
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)_第4张图片
显示结果5
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)_第5张图片
显示结果6
OpenCV 学习笔记-day10 图像像素的逻辑操作 (Opencv中rectangle函数与Rect函数的用法以及位相关操作)_第6张图片

你可能感兴趣的:(OpenCV学习,opencv,计算机视觉,图像处理)