【FLIR工业相机】三、图像处理:C++调用pytorch模型实时处理相机图像

系列文章目录

一、环境配置:win10+VS2017+qt5+spinnaker+opencv+python
二、相机调用:VS2017+qt5调用FLIR工业相机实时成像
三、图像处理:C++调用pytorch模型实时处理相机图像

1.main.cpp代码

#include "Spinnaker.h"
#include "SpinGenApi/SpinnakerGenApi.h"
#include <iostream>
#include <conio.h>
#include <sstream>
#include <opencv2/opencv.hpp>
#include <Python.h>
#include <numpy/arrayobject.h>

using namespace Spinnaker;
using namespace Spinnaker::GenApi;
using namespace Spinnaker::GenICam;
using namespace std;
using namespace cv;

CameraPtr pCam=nullptr;
SystemPtr pSystem;
CameraList camList;

PyObject *unet_module;
PyObject *preFunc = NULL;

void InitCam()
{
	pSystem = System::GetInstance();
	camList = pSystem->GetCameras();
	unsigned int numCameras = camList.GetSize();
	cout << "Number of camers detected" << numCameras << endl;
	pCam = camList.GetByIndex(0);
	pCam->Init();
	pCam->BeginAcquisition();
}

Mat AcqImg()
{
	ImagePtr pResultImage = pCam->GetNextImage();
	const size_t width = pResultImage->GetWidth();
	const size_t height = pResultImage->GetHeight();
	ImagePtr rgbImage = pResultImage->Convert(PixelFormat_BGR8);
	unsigned int rowBytes = (double)rgbImage->GetImageSize() / (double)height;

	Mat image = cv::Mat(height, width, CV_8UC3, rgbImage->GetData(), rowBytes);
	resize(image, image, Size(height*0.25, width*0.25));

	return image;
}

void DeinitCam()
{
	pCam->EndAcquisition();
	pCam->DeInit();
	camList.Clear();
	pSystem->ReleaseInstance();
}

void PythonInit()
{
	Py_Initialize();
	if (!Py_IsInitialized())
	{
		cout << "初始化失败" << endl;
		Py_Finalize();
	}
	PyRun_SimpleString("import sys");
	PyRun_SimpleString("sys.path.append('./')");
	import_array();
	unet_module = PyImport_ImportModule("UNet_model");
	if (!unet_module)
	{
		cout << "模型导入失败" << endl;
		Py_Finalize();
	}
	else
	{
		preFunc = PyObject_GetAttrString(unet_module, "predict");
		if (!preFunc)
		{
			cout << "函数调用失败" << endl;
			Py_Finalize();
		}
	}
}

Mat ProcessImg(Mat src)
{
	PyObject *preResult = NULL;
	PyArrayObject *res_array;
	npy_intp dims[3] = { 512,512,1 };
	PyObject *p_img = PyArray_SimpleNewFromData(3, dims, NPY_UINT8, (void*)src.data);

	PyObject *args = PyTuple_New(1);
	PyTuple_SetItem(args, 0, p_img);

	preResult = PyEval_CallObject(preFunc, args);
	PyArray_OutputConverter(preResult, &res_array);
	npy_intp *shape = PyArray_SHAPE(res_array);
	Mat dst(shape[0], shape[1], CV_8UC1, PyArray_DATA(res_array));

	return dst;
}

int main()
{
	InitCam();
	PythonInit();
	
	bool flag = true;
	Mat imgOrig;
	Mat imgGray;
	Mat imgPro;
	while (1)
	{
		imgOrig = AcqImg();
		imshow("original image", imgOrig);

		
		cvtColor(imgOrig, imgGray, cv::COLOR_BGR2GRAY);
		imgPro = ProcessImg(imgGray);
		imshow("processed image", imgPro);
		
		waitKey(0);
	}

	Py_Finalize();
	DeinitCam();
	return 0;
}

2.注意事项

需要将训练好的模型*.plt* 文件和模型的结构*.py文件放在main.cpp*的同级目录下。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 海康工业相机halcon图像处理例程是指利用海康工业相机halcon的软件编程接口,进行图像处理的一组例程。海康工业相机halcon是一款高性能的工业相机,具备高分辨率、高帧率和低噪声等特点,广泛应用于机器视觉、工业自动化等领域。 通过halcon图像处理例程,可以实现多种图像处理任务。首先,可以对图像进行预处理,包括图像去噪、平滑、增强等操作,提高图像质量。其次,可以进行图像分割,将图像中的目标从背景中分离出来,便于后续的目标识别和测量。此外,还可以进行形状匹配,将图像中的目标与模板进行匹配,实现目标识别和定位。同时,halcon图像处理例程还支持二维码和条形码的解码,可用于物流追溯、品质管理等应用。 除了上述常见的图像处理任务,halcon图像处理例程还支持其他一些高级功能。比如,可以进行维重建,通过多个角度的图像获取,实现对物体的模型的生成。此外,还可以进行光学字符识别(OCR),实现对文本的自动识别和提取。 总之,海康工业相机halcon图像处理例程提供了一种方便快捷的方式,帮助用户利用halcon相机进行各种图像处理任务。无论是在机器视觉、工业自动化还是其他领域,都可以通过halcon图像处理例程实现高效准确的图像处理应用。 ### 回答2: 海康工业相机是一种高质量的工业相机,可以用于各种图像处理应用。Halcon软件是一款强大的图像处理软件,提供了丰富的功能和灵活的编程接口,可以与海康工业相机完美配合使用。 Halcon图像处理例程是指一些针对特定应用场景开发的图像处理算法或功能模块。通过使用这些例程,可以方便快捷地实现图像处理任务,提高工作效率。 以海康工业相机halcon图像处理为例,我们可以利用Halcon提供的各类图像处理例程来进行图像采集、图像预处理、特征提取、目标检测等操作。首先,我们可以使用halcon图像采集例程来获取海康工业相机采集到的图像数据。然后,我们可以利用Halcon的预处理例程对图像进行滤波、增强、去噪等操作,以提高图像的质量和可用性。接着,我们可以利用Halcon提供的特征提取函数来提取图像中的特征,比如边缘、角点等。最后,我们可以使用Halcon的目标检测例程来实现目标的自动检测和识别。 通过使用海康工业相机halcon图像处理例程,可以快速、准确地完成各种图像处理任务。无论是工业自动化、机器视觉检测还是智能安防等领域,这些例程都能够为我们提供强大的功能和丰富的算法支持,使我们能够更好地应对各种复杂的图像处理需求。 ### 回答3: 海康工业相机是一种高性能的工业相机,它使用了先进的图像处理技术。其中,Halcon图像处理例程是指一系列的图像处理算法和函数,可以用于处理从海康工业相机获取到的图像数据。 Halcon图像处理例程提供了丰富的功能,包括图像预处理、特征提取、模式匹配、维视觉等。通过这些例程,我们可以对海康工业相机拍摄到的图像进行各种处理和分析。 首先,图像预处理模块可以对图像进行降噪、增强对比度、调整亮度等操作,以优化图像质量。例如,我们可以通过平滑算法去除图像中的噪声,提高图像的清晰度。 其次,特征提取模块可以提取图像中的关键特征,例如边缘、角点、轮廓等。这些特征可以用于目标检测、物体识别和跟踪等应用。通过特征提取,我们可以从图像中提取出关键信息,用于进一步的分析和决策。 另外,模式匹配模块可以对图像进行模式匹配,即在图像中寻找特定的目标或模式。这可以应用于自动检测、测量和分类等任务。我们可以使用模式匹配算法来寻找与预定义模式相匹配的图像区域。 最后,维视觉模块可以通过对图像进行深度信息的提取和分析,实现对维物体的测量和分析。这对于机器人导航、维建模和物体识别等领域非常重要。 总而言之,海康工业相机halcon图像处理例程提供了多种图像处理算法和函数,可以支持各种工业应用。它的强大功能使得我们能够更好地处理和分析从海康工业相机获取到的图像数据,为实际应用提供更准确、高效的解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值