FCN模型
- Model下载地址:https://github.com/BVLC/caffe/wiki/Model-Zoo
使用模型实现图像分割(支持20个分割标签) - 20个分类标签
二进制模型
fcn8s-heavy-pascal.caffemodel
网络描述
fcn8s-heavy-pascal.prototxt
分割信息
pascal-classes.txt
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <iostream>
//伪代码
using namespace std;
using namespace cv::dnn;
using namespace cv;
const size_t width = 300;
const size_t height = 300;
String Label_Text = "sources/samples/data/dnn/pascal-classes.txt";//分类信息
String Model_Caffe = "sources/samples/data/dnn/fcn8s-heavy-pascal.caffemodel";//Caffe二进制模型
String Model_Text = "sources/data/dnn/fcn8s-heavy-pascal.prototxt";//网络描述
vector<Vec3b> readColors();//颜色标签
//https://blog.youkuaiyun.com/hunzhangzui9837/article/details/82839265
int main(int argc, char** argv)
{
Mat src = imread("../path.jpg");
if (src.empty())
{
printf("could not load image...\n");
return -1;
}
namedWindow("input image", WINDOW_AUTOSIZE);
imshow("input image", src);
resize(src, src, Size(500, 500));//描述文件
vector<Vec3b> colors = readColors();
//读取Caffe模型
Net net = readNetFromCaffe(Model_Text, Model_Caffe);
Mat blobImage = blobFromImage(src);//图片预处理
//计算FCN模型计算时间
float time = getTickCount();
net.setInput(blobImage, "data");//第一个layer_name
Mat score = net.forward("score"); //最后一个layer_name
float tt = getTickCount() - time;
cout << "FCN模型计算时间time consume:" << (tt / getTickFrequency()) * 1000 << endl;
/*input_shape {
dim: 1//表示对待识别样本进行数据增广的数量
dim: 3//图像通道数
dim: 300//图像长度
dim: 300//图像宽度
}*/
const int rows = score.size[2];
const int cols = score.size[3];
const int channels = score.size[1];
Mat maxCl(rows, cols, CV_8