CUDA学习6

6.1 Opencv+VS2022+Win11(本机)安装

        OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby.MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

        OpenCV本身包含多种功能:图像处理、三维重建、机器视觉、人机互动、物体识别以及人脸识别等。

        安装教程请自行搜索。

        测试Opencv是否安装好:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	Mat pic = imread("HappyFish.png");
	imshow("pic", pic);
	waitKey(0);
	return 0;
}
HappyFish.png

        成功的话就是运行之后会显示出来图片。

        用OpenCV做一个图片模糊实例:

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	Mat pic = imread("HappyFish.png");
	Mat d;
	cv::blur(pic, d, Size(7, 7), Point(-1, -1));
	namedWindow("pic", WINDOW_NORMAL);

	imshow("pic", pic);
	imshow("blur", d);
	waitKey(0);
	return 0;
}

         可以看到模糊成功了。

        Opencv测试结束。

6.2 Opencv的使用

主要用到的变量类型:Mat

读取图片:imread

                Mat frame;

                frame=imread("图片路径");

 展示图片:imshow,waitKey

                imshow("窗口名",frame);

                waitKey(n);    //n表示窗口持续的时间(毫秒),若n=0,则接收到按键后窗口才会消失

可调节大小的窗口:nameWindow("窗口名",WINDOW_NORMAL)

Mat类型

        图片实际上是一个数字矩阵,每个矩阵上的元素标志着该点的亮度信息,一般图片由一个unsigned char*指针去储存,由于unsigned char类型的size为1个字节,所以一般图片每个点记录的亮度信息可以有256个等级(O-255)。

        对于灰度图片,每个点保存该点的亮度信息,即一个黑点,该点的值为0。一个白点的亮度为255。(中间为不同灰度级的图片)

        对于彩色图像(以BGR图片为例),连续3个unsigned char表示一个彩色点的信息,第一个表示该点的蓝光亮度,第二个表示该点的绿光亮度,第三个表示该点的红光亮度。

 图片处理函数

1.灰度化处理(src为输入的图片,dst为输出的灰度图片,都是Mat类型):

    cvtColor(src,dst,COLOR_BGR2GRAY);

2.BGR图片转为RGB图片(src为输入的图片,dst为输出的图片,都是Mat类型):

    cvtColor(src,dst,COLOR_BGR2RGB);

3.模糊处理(src为输入的图片,dst为输出的灰度图片,Size(7,7)表示模糊核的长度为7*7,Point为模糊和的中心坐标,当指定为-1时,默认正中心为中心点):

    blur(src,dst,Size(7,7),Point(-1,-1));

4.掩模操作(可锐化、边缘提取等)(src.depth()表示输入图的深度,灰度图的深度为1,BGR彩色图的深度为3,还有可能有深度为4的BGRA等图像):

当掩模矩阵数字加起来为0时是在做边缘提取;像下面这个加起来是1,做的是边缘锐化。

    Mat mask=(Mat_<char>(3,3)<<-1,-1,-1,-1,9,-1,-1,-1,-1);  //掩模的初始化

    filter2D(src,dst,src.depth(),mask);

 5.通道分割split(处理后,bgr_channel[0],bgr_channel[1],bgr_channel[2]为bgr对应的亮度图)

    vector<Mat> bgr_channel;

    split(src,bgr_channel);

6.通道合并merge(经过处理后bgr_channels的通道按顺序作为bgr合并生成dst彩色图)

    Merge(bgr_channel,dst);

7.直方图均衡变换

    equalizeHist(src,dst);

5和6一般用于彩色图像的直方图均衡化。

代码实例:对图片进行灰度化,用 [-1,-1,-1;-1,8,-1;-1,-1,-1]对图片进行边缘提取

#include<opencv2/opencv.hpp>

using namespace cv;

int main()
{
	Mat pic = imread("HappyFish.png");
	Mat d,dst;

	//cv::blur(pic, d, Size(7, 7), Point(-1, -1));
	cvtColor(pic, d, COLOR_BGR2GRAY);//灰度化
	namedWindow("pic", WINDOW_NORMAL);

	//掩模运算
	Mat mask = (Mat_<char>(3, 3) << -1, -1, -1, -1, 8, -1, -1, -1, -1);  //掩膜的初始化
	filter2D(pic, dst, pic.depth(), mask);
	imshow("pic", pic);
	imshow("gray", d);
	imshow("yanmo", dst);
	waitKey(0);
	return 0;
}

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
 

)">
下一篇>>