本文记录下opencv中主要的函数在hls、opencv中的书写格式。(书写时,顺便注意下大小写)
目录
1、首先贴出使用代码以供参考。后面列出各个函数的用法和部分介绍
2、cvtcolor,以及图像类型定义不当导致的问题。
3、GaussianBlur
4、dilate膨胀、erode腐蚀
5、threshold
6、filter2d
7、EqualizeHist直方图均衡化(特别注意!!单独调用一次会失败)
1、首先贴出GAUSSIANBLUR的使用案例以供参考。(只涉及了数据结构与端口的优化方法,关于for等其他的具体优化方法见后续文章)
top.cpp
#include "top.h"
void hls_gaussianblur(AXI_STREAM& INPUT_STREAM, AXI_STREAM& OUTPUT_STREAM, int rows, int cols)
{
/*
#pragma HLS INTERFACE axis port=INPUT_STREAM
#pragma HLS INTERFACE axis port=OUTPUT_STREAM
#pragma HLS RESOURCE core=AXI_SLAVE variable=rows metadata="-bus_bundle CONTROL_BUS"
#pragma HLS RESOURCE core=AXI_SLAVE variable=cols metadata="-bus_bundle CONTROL_BUS"
#pragma HLS RESOURCE core=AXI_SLAVE variable=return metadata="-bus_bundle CONTROL_BUS"
#pragma HLS INTERFACE ap_stable port=rows
#pragma HLS INTERFACE ap_stable port=cols
*/
//RGB_IMAGE img_0(rows, cols);
//RGB_IMAGE img_1(rows, cols);
RGB_IMAGE img_0;
RGB_IMAGE img_1;
RGB_PIXEL pix(10, 10, 10);
#pragma HLS dataflow
hls::AXIvideo2Mat(INPUT_STREAM, img_0);
hls::GaussianBlur<3,3>(img_0, img_1);
hls::Mat2AXIvideo(img_1, OUTPUT_STREAM);
}
top.h
#ifndef _TOP_H_
#define _TOP_H_
#include "hls_video.h"
// maximum image size
#define MAX_WIDTH 512
#define MAX_HEIGHT 512
// I/O Image Settings
#define INPUT_IMAGE "lena.jpg"
#define OUTPUT_IMAGE "result.jpg"
// typedef video library core structures
typedef hls::stream<ap_axiu<32, 1, 1, 1> > AXI_STREAM;
typedef hls::Scalar<3, unsigned char> RGB_PIXEL;
typedef hls::Mat<MAX_HEIGHT, MAX_WIDTH, HLS_8UC3> RGB_IMAGE;
// top level function for HW synthesis
void hls_gaussianblur(AXI_STREAM& INPUT_STREAM, AXI_STREAM& OUTPUT_STREAM, int rows, int cols);
#endif
opencv_top.cpp
#include "opencv_top.h"
#include "top.h"
void opencv_image_guassianblur(cv::Mat src, cv::Mat dst)
{
cv::GaussianBlur(src, dst, cv::Size(3, 3), 0);
}
opencv_top.h
#ifndef ___OPENCV_TOP_H___
#define ___OPENCV_TOP_H___
#include "hls_opencv.h"
void opencv_image_guassianblur(cv::Mat src, cv::Mat dst);
#endif
test.cpp
#include "top.h"
#include "opencv_top.h"
using namespace std;
using namespace cv;
//高斯滤波
int main(int argc, char** argv)
{
//mat的导入与创建
Mat src_mat = imread("lena.jpg");
Mat dst_mat;//存结果
imshow("original_lena,jpg",src_mat);
dst_mat = cv::Mat::zeros(src_mat.cols, src_mat.rows, CV_8UC3);
//HLS
AXI_STREAM src_axi, dst_axi;
cvMat2AXIvideo(src_mat, src_axi);
hls_gaussianblur(src_axi, dst_axi, src_mat.cols, src_mat.rows);
AXIvideo2cvMat(dst_axi, dst_mat);
cv::imshow("hls_gaussian.jpg", dst_mat);
//ʹOPENCV
opencv_image_guassianblur(src_mat, dst_mat);
cv::imshow("opencv_gaussian.jpg", dst_mat);