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是沒有被另外的模塊調用,因此是正確的
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:
在OpenCV中IplImage是表示一個圖bai像的結構體,也是從OpenCV1.0到目du前最爲重要的一個結構;在之前的dao圖像表示用IplImage,而且之前的OpenCV是用C語言編寫的,提供的接口也是C語言接口;
Mat:
Mat是後來OpenCV封裝的一個C++類,用來表示一個圖像,和IplImage表示基本一致,但是Mat還添加了一些圖像函數;
mat和iplimage兩者對於內存圖像數據創建稍有不同:IplImage,通過cvCreateImage,創建後複製像素到創建的內存,或者cvCreateImageHeader和cvSetImageData創建;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);
大概就是這麼個意思吧。