图像灰度处理与边缘检测


图片是从网上下载,先将其处理为灰度图像,之后进行边缘检测。

#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL

#include"vtkAutoInit.h"
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)

#endif

//转为灰度和滤波
int main()
{
	vtkSmartPointer reader1 =
		vtkSmartPointer::New();
	reader1->SetFileName("D:\\QTData\\Vtk-new\\figure2.jpg");
	reader1->Update();

	//图像灰度化
    vtkSmartPointer luminanceFilter =
		vtkSmartPointer::New();
	luminanceFilter->SetInputConnection(reader1->GetOutputPort());
	luminanceFilter->Update();

	//计算图像梯度
	vtkSmartPointer imgGradient =
		vtkSmartPointer::New();
	imgGradient->SetInputConnection(luminanceFilter->GetOutputPort());
	imgGradient->SetDimensionality(2);//图像维数

	//计算梯度向量的2范数,即向量的模
	vtkSmartPointer imgMagnitude =
		vtkSmartPointer::New();
	imgMagnitude->SetInputConnection(imgGradient->GetOutputPort());
	imgMagnitude->Update();

	double Range[2];
	vtkSmartPointer getRange =
		vtkSmartPointer::New();
	imgMagnitude->GetOutput()->GetScalarRange(Range);//图像灰度范围最小值、最大值

	//调整图像的数据范围
	vtkSmartPointer imgShiftScale =
		vtkSmartPointer::New();
	imgShiftScale->SetOutputScalarTypeToUnsignedChar(); //强制类型转换 0~255
	imgShiftScale->SetScale(255 / Range[1]); //灰度映射间距
	imgShiftScale->SetInputConnection(imgMagnitude->GetOutputPort());
	imgShiftScale->Update();

	
		vtkSmartPointer origActor =
		vtkSmartPointer::New();
	origActor->SetInputData(reader1->GetOutput());

	vtkSmartPointer GradientActor =
		vtkSmartPointer::New();
	GradientActor->SetInputData(imgShiftScale->GetOutput());

	double origView[4] = { 0, 0, 0.5, 1 };
	double gradientView[4] = { 0.5, 0, 1, 1 };
	vtkSmartPointer origRender =
		vtkSmartPointer::New();
	origRender->SetViewport(origView);
	origRender->AddActor(origActor);
	origRender->ResetCamera();
	origRender->SetBackground(1.0, 0, 0);

	vtkSmartPointer gradientRender =
		vtkSmartPointer::New();
	gradientRender->SetViewport(gradientView);
	gradientRender->AddActor(GradientActor);
	gradientRender->ResetCamera();
	gradientRender->SetBackground(1, 1, 1);

	vtkSmartPointer rw =
		vtkSmartPointer::New();
	rw->AddRenderer(origRender);
	rw->AddRenderer(gradientRender);
	rw->SetSize(640, 320);
	rw->SetWindowName("Image Gradient");

	vtkSmartPointer rwi =
		vtkSmartPointer::New();
	vtkSmartPointer style =
		vtkSmartPointer::New();
	rwi->SetRenderWindow(rw);
	rwi->SetInteractorStyle(style);
	rwi->Initialize();
	rwi->Start();

	return 0;
}

  实现结果如下图所示:

 参考:https://www.cnblogs.com/ybqjymy/p/14241281.html

    https://blog.csdn.net/shenziheng1/article/details/54747184

相关