HLS 错误/警告/函数积累等问题——个人学习记录(持续更新)

1.

HLS中持续出现:WARNING: Hls::stream 'hls::stream<ap_axiu<32, 1, 1, 1> >.1' is read while empty, which may result in RTL simulation hanging.

解决办法:这是因为输入的axi_src为空,因此需要把读进来的图片src_img转换成axi_src,需要加上IplImage2AXIvideo(src_img,axi_src);

另外有一种情况也能导致上述情况的发生。如:在IP核中有多个图像处理的步骤(以高斯滤波为例):

    hls::GaussianBlur<5,5>(hsv_v,f1_v);
    hls::GaussianBlur<5,5>(f1_v,f2_v);
    hls::GaussianBlur<5,5>(f2_v,f3_v);
    hls::CvtColor<HLS_GRAY2RGB>(f1_v,display_img);//这个地方有错,因为f1_v被第二层高斯滤波用掉了,因此f1_v就会变成空,这时候会报错。

改成如下格式就不会出错了:

    hls::GaussianBlur<5,5>(hsv_v,f1_v);
    hls::GaussianBlur<5,5>(f1_v,f2_v);
    hls::GaussianBlur<5,5>(f2_v,f3_v);
    hls::CvtColor<HLS_GRAY2RGB>(f3_v,display_img);//f3_v是没有被另外的模块调用,因此是正确的

如果想在HLS里多次引用变量,请使用hls::Duplicate(src,dst1,dst2);这个函数,能够复制两份变量。其中一个变量只能用一次。用法如下(注意注释)。原文链接:https://forums.xilinx.com/t5/High-Level-Synthesis-HLS/WARNING-Hls-stream-hls-stream-lt-unsigned-char-gt-1-is-read/m-p/1125807#M21260

	hls::GaussianBlur<5,5>(hsv_v,f1_v);
	hls::Duplicate(f1_v,dis_1,to_f2);//把f1_v复制了两份,一份用于显示(dis_1),另一份用于下一层高斯滤波(to_f2)
	
    hls::CvtColor<HLS_GRAY2RGB>(dis_1,display_img1);//
	hls::GaussianBlur<5,5>(to_f2,f2_v);

2.

IplImage转Mat类型。具体是深拷贝还是浅拷贝,这里我不太懂C++的语法,我只是会用。读取图片显示问题,cvShowImage显示IplImage类型的图片,而imshow显示Mat类型的图片。

//Loading image to IplImage  
 IplImage *img=cvLoadImage(“img_name.jpg”);
 cvShowImage("Ipl",img);

 //converting IplImage to cv::Mat  
Mat image=cvarrToMat(img);
 imshow("Mat",image);

3.

Mat类型转IplImage类型。显示各个类型的图片。

//Reading Image to cv::Mat  
 Mat image =imread(argv[1],1);  

 //Converting Mat to IplImage  
 IplImage test = image; 

 //showing image from mat  
 imshow("Mat",image);

 //showing image from IplImage  
 cvShowImage("Ipl",&test); 

4.IplImage和Mat类型的区别

IplImage

OpenCVIplImage是表示一个图bai像的结构体,也是从OpenCV1.0到目du前最为重要的一个结构;在之前的dao图像表示用IplImage,而且之前的OpenCV是用C语言编写的,提供的接口也是C语言接口;

Mat

Mat是后来OpenCV封装的一个C++类,用来表示一个图像,和IplImage表示基本一致,但是Mat还添加了一些图像函数;

matiplimage两者对于内存图像数据创建稍有不同:IplImage,通过cvCreateImage,创建后复制像素到创建的内存,或者cvCreateImageHeadercvSetImageData创建;cv::Mat,直接可以通过构造函数Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP);直接创建。

5.cvSplit和cvMerge两个函数的用法:

dst是HSV图像,HSV三个通道分开显示:

	cvSplit(dst,ch1,ch2,ch3,0);
	cvMerge(ch1,NULL,NULL,NULL,ch_1);
	cvShowImage("HH",ch_1);
	cvReleaseImage(&ch_1);
	cvMerge(NULL,ch2,NULL,NULL,ch_2);
	cvShowImage("SS",ch_2);
	cvReleaseImage(&ch_2);
	cvShowImage("VV",ch3);

大概就是这么个意思吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值