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

移位点坐标中的小数位数

例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

移位点坐标中的小数位数

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

python opencv 矩形框检测 opencv画矩形函数_python opencv 矩形框检测


显示结果2

python opencv 矩形框检测 opencv画矩形函数_#include_02


显示结果3

python opencv 矩形框检测 opencv画矩形函数_计算机视觉_03


显示结果4

python opencv 矩形框检测 opencv画矩形函数_计算机视觉_04


显示结果5

python opencv 矩形框检测 opencv画矩形函数_#include_05


显示结果6

python opencv 矩形框检测 opencv画矩形函数_#include_06