圖像特效顯示 | 馬賽克顯示,掃描顯示等
點擊上方“AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
來源:Opencv視覺實踐

之前看的楊淑瑩老師的《數(shù)字圖像處理Visual Studio C++技術(shù)實現(xiàn)》,里面的代碼都沒來得及打,而且其是基于自定義的圖像類實現(xiàn)的,這個系列就把所有例程移植為opencv-C++實現(xiàn),也就是算法邏輯用C++實現(xiàn),圖像對象使用opencv自帶的圖像類。
該書在B站有配套教程,是天津理工大學(xué)楊淑瑩老師的公開課,直接搜就行。
所以此系列不詳細(xì)講原理,只放基本思路+代碼+運行效果,詳細(xì)原理可以看書,我就不復(fù)述書的內(nèi)容了。
向下掃描就是對圖像進行分塊并延時顯示。
可以通過不斷的改變顯示的roi區(qū)域來達(dá)到掃描的效果:
void scanning_down(){//讀取圖片Mat srcImage, dstImage;srcImage = imread("2.jpg");imshow("原圖", srcImage);//定義變量Mat roiImage;int ImageHeigth = srcImage.rows;int ImageWidth = srcImage.cols;namedWindow("向下掃描");for (int i = 1; i < ImageHeigth; i++) {//步長為1roiImage = srcImage(Rect(0, 0, ImageWidth, i));roiImage.copyTo(dstImage);imshow("向下掃描", dstImage);waitKey(5);}waitKey(0);}
動圖

向上,向左,向右掃描顯示同理。
圖像漸顯思路是先記錄下圖像每個像素點的像素值,顯示的時候先將屏幕置黑,將循環(huán)顯示圖像n次,n依次為0,1,2,...,256。每一次顯示像素值的n/256倍,從而達(dá)到漸顯的效果。
void fade_in()//淡入{//讀取圖片Mat srcImage, dstImage;srcImage = imread("2.jpg");dstImage = srcImage.clone();imshow("原圖", srcImage);//定義變量Mat roiImage;int ImageHeigth = srcImage.rows;int ImageWidth = srcImage.cols * 3;namedWindow("圖像漸顯");for (int n = 1; n < 256; n++) {for (int i = 0; i < ImageHeigth; i++) {uchar* data1 = srcImage.ptr(i); uchar* data2 = dstImage.ptr(i); for (int j = 0; j < ImageWidth; j++) {data2[j] = data1[j] * n / 256;}}imshow("圖像漸顯", dstImage);waitKey(10);}}
動圖

馬賽克顯示是將圖片分為固定大小的小塊,并記錄下所有小塊的左上角坐標(biāo),然后隨機將這些小塊顯示出來,就是馬賽克效果。
//圖像馬賽克顯示void mosaic(){//讀取圖片Mat srcImage, dstImage;srcImage = imread("2.jpg");dstImage = Mat(srcImage.size(), CV_8UC3);imshow("原圖", srcImage);//定義變量Mat roiImage;int ImageHeigth = srcImage.rows;int ImageWidth = srcImage.cols;namedWindow("圖像馬賽克顯示");//存儲每個小塊的首地址并隨機打亂int step =24;//定義馬賽克邊長(正方形)vectortemp; unsigned int mi = 0;//for循環(huán)存儲所有節(jié)點坐標(biāo)for (int x = 0; x < ImageWidth; x = x + step) {for (int y = 0; y < ImageHeigth; y = y + step) {if (x > ImageWidth - step) {x = ImageWidth - step;}if (y > ImageHeigth - step) {y = ImageHeigth - step;}temp.push_back(Point2d(x,y));mi++;}}random_shuffle(temp.begin(), temp.end());//打亂容器內(nèi)元素//for循環(huán)顯示每個隨機馬賽克for (int i = 0; i < mi; i++) {srcImage(Rect(temp[i].x, temp[i].y, step, step)).copyTo(dstImage(Rect(temp[i].x, temp[i].y, step, step)));imshow("圖像馬賽克顯示", dstImage);waitKey(1);}waitKey(0);}
動圖

如果喜歡此系列,可以幫忙點下底部小卡片支持一下。
下載1:何愷明頂會分享
在「AI算法與圖像處理」公眾號后臺回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析
下載2:leetcode?開源書
在「AI算法與圖像處理」公眾號后臺回復(fù):leetcode,即可下載。每題都 runtime beats 100% 的開源好書,你值得擁有!
下載3 CVPR2020 在「AI算法與圖像處理」公眾號后臺回復(fù):CVPR2020,即可下載1467篇CVPR?2020論文 個人微信(如果沒有備注不拉群!) 請注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱
覺得不錯就點亮在看吧


