白痴爱面包 发表于 2023-4-3 12:09:00

opencv c++如何快速入门

想了解一些基本的opencv库函数,一些代码实例,用c++写的

isdkz 发表于 2023-4-3 12:10:40

OpenCV是一个广泛使用的计算机视觉库,可以用于图像处理、计算机视觉、机器学习等领域。下面是快速入门OpenCV C++的一些步骤和代码实例:

步骤1:安装OpenCV

首先,你需要在你的计算机上安装OpenCV。你可以从官网上下载安装文件并按照说明安装,也可以使用包管理器在Linux系统中安装。

步骤2:创建一个OpenCV项目

在你的IDE(如Visual Studio)中创建一个新项目,选择C++语言,添加OpenCV库文件,确保你的IDE能够找到OpenCV库的路径。

步骤3:加载和显示图像

加载和显示图像是使用OpenCV最基本的操作之一。下面是一个简单的例子:

arduino
Copy code
#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");// 读取图像
    imshow("image", image);         // 显示图像
    waitKey(0);                     // 等待按键
    return 0;
}
这个程序使用imread函数读取名为image.jpg的图像,使用imshow函数显示这个图像,使用waitKey函数等待用户按下任意键退出程序。

步骤4:处理图像

OpenCV提供了大量的函数和算法,可以用于图像处理和计算机视觉。下面是一个简单的例子,使用Canny函数实现边缘检测:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");// 读取图像
    Mat edges;
    Canny(image, edges, 100, 200);    // 边缘检测
    imshow("edges", edges);         // 显示边缘
    waitKey(0);                     // 等待按键
    return 0;
}


这个程序使用Canny函数检测图像的边缘,并使用imshow函数显示边缘检测结果。

步骤5:学习更多OpenCV函数和算法

以上只是OpenCV的一小部分,OpenCV还提供了很多其他的函数和算法,如图像滤波、特征检测、物体识别等等。你可以查看OpenCV的官方文档,学习更多的函数和算法。

希望这些代码示例和步骤可以帮助你快速入门OpenCV C++,并开始使用这个强大的库进行图像处理和计算机视觉。

白痴爱面包 发表于 2023-4-3 12:24:03

isdkz 发表于 2023-4-3 12:10
OpenCV是一个广泛使用的计算机视觉库,可以用于图像处理、计算机视觉、机器学习等领域。下面是快速入门Open ...

我还想了解以下库函数以及一些简单的代码实例
threshold
cvtColor
findContours
dilate
Laplacian
Sobel
Canny
HoughLines

isdkz 发表于 2023-4-3 12:33:40

白痴爱面包 发表于 2023-4-3 12:24
我还想了解以下库函数以及一些简单的代码实例
threshold
cvtColor


以下是关于这些库函数的简介和一些简单的代码示例:

1、threshold函数
threshold函数可以用于对图像进行二值化处理。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage, binaryImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
    imshow("binary image", binaryImage);
    waitKey(0);
    return 0;
}


这个程序使用threshold函数将灰度图像二值化,并使用imshow函数显示结果。

2、cvtColor函数
cvtColor函数可以用于将图像从一种颜色空间转换到另一种颜色空间。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    imshow("gray image", grayImage);
    waitKey(0);
    return 0;
}

这个程序使用cvtColor函数将彩色图像转换为灰度图像,并使用imshow函数显示结果。

3、findContours函数
findContours函数可以用于寻找图像中的轮廓。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage, binaryImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
    std::vector<std::vector<Point>> contours;
    findContours(binaryImage, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
    Mat resultImage = Mat::zeros(binaryImage.size(), CV_8UC3);
    drawContours(resultImage, contours, -1, Scalar(0, 0, 255), 2);
    imshow("contours", resultImage);
    waitKey(0);
    return 0;
}

这个程序使用findContours函数寻找二值图像中的轮廓,并使用drawContours函数将轮廓绘制在一个新图像上。

4、dilate函数
dilate函数可以用于对图像进行膨胀处理。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage, binaryImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    threshold(grayImage, binaryImage, 100, 255, THRESH_BINARY);
    Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
    Mat dilateImage;
    dilate(binaryImage, dilateImage, kernel);
    imshow("dilate image", dilateImage);
    waitKey(0);
    return 0;
}

这个程序使用dilate函数对二值图像进行膨胀,并使用imshow函数显示结果。

5、Laplacian函数
Laplacian函数可以用于计算图像的拉普拉斯算子。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    Mat laplacianImage;
    Laplacian(grayImage, laplacianImage, CV_16S);
    convertScaleAbs(laplacianImage, laplacianImage);
    imshow("laplacian image", laplacianImage);
    waitKey(0);
    return 0;
}

这个程序使用Laplacian函数计算灰度图像的拉普拉斯算子,并使用convertScaleAbs函数将结果转换为8位无符号整型图像,并使用imshow函数显示结果。

6、Sobel函数
Sobel函数可以用于计算图像的Sobel算子。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    Mat sobelImage;
    Sobel(grayImage, sobelImage, CV_16S, 1, 1);
    convertScaleAbs(sobelImage, sobelImage);
    imshow("sobel image", sobelImage);
    waitKey(0);
    return 0;
}

这个程序使用Sobel函数计算灰度图像的Sobel算子,并使用convertScaleAbs函数将结果转换为8位无符号整型图像,并使用imshow函数显示结果。

7、Canny函数
Canny函数可以用于进行边缘检测。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    Mat cannyImage;
    Canny(grayImage, cannyImage, 100, 200);
    imshow("canny image", cannyImage);
    waitKey(0);
    return 0;
}

这个程序使用Canny函数对灰度图像进行边缘检测,并使用imshow函数显示结果。

8、HoughLines函数
HoughLines函数可以用于检测图像中的直线。以下是一个简单的例子:

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    Mat image = imread("image.jpg");
    Mat grayImage, cannyImage;
    cvtColor(image, grayImage, COLOR_BGR2GRAY);
    Canny(grayImage, cannyImage, 100, 200);
    std::vector<Vec2f> lines;
    HoughLines(cannyImage, lines, 1, CV_PI / 180, 100);
    Mat resultImage = image.clone();
    for (size_t i = 0; i < lines.size(); i++) {
      float rho = lines, theta = lines;
      Point pt1, pt2;
      double a = cos(theta), b = sin(theta);
      double x0 = a * rho, y0 = b * rho;
      pt1.x = cvRound(x0 + 1000 * (-b));
      pt1.y = cvRound(y0 + 1000 * a);
      pt2.x = cvRound(x0 - 1000 * (-b));
      pt2.y = cvRound(y0 - 1000 * a);
      line(resultImage, pt1, pt2, Scalar(0, 0, 255), 2, LINE_AA);
    }
    imshow("hough lines", resultImage);
    waitKey(0);
    return 0;
}


这个程序使用`Canny`函数对灰度图像进行边缘检测,然后使用`HoughLines`函数检测图像中的直线,

并使用`line`函数将直线绘制在原始图像上,最后使用`imshow`函数显示结果。


希望以上关于这些库函数的简介和示例可以帮助你更好地理解和学习OpenCV C++。

dolly_yos2 发表于 2023-4-3 14:30:05

https://docs.opencv.org/4.x/
https://docs.opencv.org/4.x/d9/df8/tutorial_root.html
最佳选择

白痴爱面包 发表于 2023-4-3 18:44:16

dolly_yos2 发表于 2023-4-3 14:30
https://docs.opencv.org/4.x/
https://docs.opencv.org/4.x/d9/df8/tutorial_root.html
最佳选择

感谢{:10_256:}
页: [1]
查看完整版本: opencv c++如何快速入门