Comment faire de la vision industrielle et du traitement d'images en C++ ?
La vision industrielle et le traitement d'images sont des branches importantes dans le domaine de l'informatique et sont largement utilisés dans la reconnaissance d'images, la détection de cibles, la reconnaissance faciale et d'autres domaines. En C++, il existe de nombreuses bibliothèques et outils puissants qui peuvent nous aider à implémenter des fonctions de vision industrielle et de traitement d'images. Cet article expliquera comment utiliser la bibliothèque OpenCV pour effectuer la vision industrielle et le traitement d'images en C++, et donnera des exemples de code correspondants.
Chargement et affichage des images
Tout d'abord, nous devons charger une image puis l'afficher. Voici un exemple de code simple :
#include <opencv2/opencv.hpp> int main() { // 加载图像 cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR); // 检查图像是否成功加载 if (image.empty()) { std::cerr << "Failed to load image" << std::endl; return -1; } // 创建一个窗口并显示图像 cv::namedWindow("Image", cv::WINDOW_NORMAL); cv::imshow("Image", image); // 等待键盘输入 cv::waitKey(0); return 0; }
Dans cet exemple, nous utilisons la fonction imread
函数加载一张图像,并将其存储在cv::Mat
对象中。然后,我们创建一个窗口,并使用imshow
函数显示图像。最后,使用waitKey
pour attendre que l'utilisateur appuie sur n'importe quelle touche avant de fermer la fenêtre.
3.1 Ajustement de la luminosité et du contraste
#include <opencv2/opencv.hpp> int main() { // 加载图像 cv::Mat image = cv::imread("image.jpg", cv::IMREAD_COLOR); // 将图像转换为浮点类型 cv::Mat image_float; image.convertTo(image_float, CV_32F); // 调整亮度和对比度 cv:: Mat adjusted_image = image_float * 1.2 + 20; // 将图像转换回无符号8位整数类型 cv::Mat output_image; adjusted_image.convertTo(output_image, CV_8U); // 创建一个窗口并显示图像 cv::namedWindow("Output", cv::WINDOW_NORMAL); cv::imshow("Output", output_image); // 等待键盘输入 cv::waitKey(0); return 0; }
Dans cet exemple, nous convertissons d'abord l'image en type à virgule flottante, puis l'ajustons en la multipliant par un facteur et en ajoutant un décalage de luminosité et contraste. Enfin, l'image est reconvertie en un type entier non signé de 8 bits et l'image ajustée est affichée.
3.2 Détection des contours
#include <opencv2/opencv.hpp> int main() { // 加载图像 cv::Mat image = cv::imread("image.jpg", cv::IMREAD_GRAYSCALE); // 使用Canny算子进行边缘检测 cv::Mat edges; cv::Canny(image, edges, 100, 200); // 创建一个窗口并显示边缘图像 cv::namedWindow("Edges", cv::WINDOW_NORMAL); cv::imshow("Edges", edges); // 等待键盘输入 cv::waitKey(0); return 0; }
Dans cet exemple, nous convertissons d'abord l'image en une image en niveaux de gris, puis utilisons l'opérateur Canny pour la détection des contours. Enfin, nous affichons l’image du bord détectée.
Ce qui précède ne montre qu'une petite partie des fonctions de traitement d'image. La bibliothèque OpenCV fournit également de nombreux autres algorithmes puissants de traitement d'image et de vision industrielle, tels que la segmentation d'images, l'extraction de caractéristiques, la correspondance de modèles, etc. Vous pouvez choisir les fonctions et méthodes correspondantes en fonction de vos besoins spécifiques.
En résumé, nous pouvons utiliser les bibliothèques C++ et OpenCV pour implémenter diverses fonctions de vision industrielle et de traitement d'images. En chargeant et en affichant des images, et en appliquant différentes opérations de traitement, nous pouvons mettre en œuvre de nombreuses applications intéressantes et pratiques. Si vous êtes intéressé par la vision industrielle et le traitement d’images, vous pouvez aussi bien essayer d’utiliser C++ et OpenCV pour explorer davantage de possibilités.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!