c++ openCV基础使用

环境:
OpenCV – 2.4.13.6
vs2017
win7

打开摄像头

#include 
#include 
#include 
using namespace cv;
using namespace std;

int main(){
	//VideoCapture capture("video.aiv");//打开指定视频
	VideoCapture capture(0);//打开摄像头
	if (!capture.isOpened())//没有打开摄像头的话,就返回。
		return 1;
	Mat img1;
	Mat img_binary;
	while (true)
	{
		Mat frame;
		capture >> frame;
		cvtColor(frame, img1, CV_BGR2GRAY);//将原图转为灰阶图
		threshold(img1, img_binary, 100, 255, CV_THRESH_BINARY);//将灰度图转为二值图
		putText(frame, "Hello Word!!", Point(40, 60), FONT_HERSHEY_COMPLEX_SMALL, 2, Scalar(125, 125, 225), 1, 8, false);//显示字体在原图中
		imshow("原图", frame);
		imshow("灰度图", img1);
		imshow("二值图", img_binary);
		//waitKey(40);//等待40毫秒
		if (cvWaitKey(50) == 27){//按esc键退出
			cvSaveImage("Image.png", frame, 0);//保存当前屏幕上的图像到本地
		break;
	}	
	return 0;
}

图像二值化

图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。
主要使用方法 threshold ,该方法是通过遍历灰度图中点,将图像信息二值化,处理过后的图片只有二种色值。
原型:

double threshold (InputArray src, OutputArray dst, double thresh, double maxval, int type)  

参数信息:

参数 含义
InputArray src 输入数组,填单通道 , 8或32位浮点类型的Mat即可
OutputArray dst 函数调用后的运算结果存在这里,即这个参数用于存放输出结果,且和第一个参数中的Mat变量有一样的尺寸和类型
double thresh 阈值的最小值
double maxval 当第五个参数阈值类型type取 THRESH_BINARY 或THRESH_BINARY_INV阈值类型时的最大值
int type 阈值类型

显示文字

在OpenCV中利用putText()函数可以在图像上显示文字
原型:

void putText(Mat& img, const string& text, Point org, int fontFace, double fontScale, Scalar color, int thickness=1, int lineType=8, bool bottomLeftOrigin=false )

参数信息:

参数 含义
Mat& img 显示文字所在的图像
const string& text 需要显示的文字
Point org 文字显示的位置
int fontFace 字体类型
double fontScale 字体大小(实际大小为fontScale *乘以内置字体大小 )
Scalar color 字体颜色
int thickness 字体的粗细
int lineType 线性
bool bottomLeftOrigin true 图像数据原点在左下角 false 图像数据原点在左上角
字体类型
FONT_HERSHEY_SIMPLEX
FONT_HERSHEY_PLAIN
FONT_HERSHEY_DUPLEX
FONT_HERSHEY_COMPLEX
FONT_HERSHEY_TRIPLEX
FONT_HERSHEY_COMPLEX_SMALL
FONT_HERSHEY_SCRIPT_SIMPLEX
FONT_HERSHEY_SCRIPT_COMPLEX

图像的像素操作

三通道色彩图像:

uchar b, g, r;
b = frame.at<Vec3b>(i, j)[0];
g = frame.at<Vec3b>(i, j)[1];
r = frame.at<Vec3b>(i, j)[2];

二值化图像:
由于图像经过二值化后,像素就只剩下0与255,所以访问方法有所改变

img_binary.at<uchar>(y, x);
//判断当前点的像素是否为黑色
if(img_binary.at<uchar>(y, x)==0){
	//TODO
}

你可能感兴趣的:(c++,OpenCV)