最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV實(shí)現(xiàn)馬賽克和毛玻璃濾鏡效果

 更新時(shí)間:2021年09月06日 14:27:57   作者:-牧野-  
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)馬賽克和毛玻璃濾鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了OpenCV實(shí)現(xiàn)馬賽克和毛玻璃濾鏡的具體代碼,供大家參考,具體內(nèi)容如下

一、馬賽克效果

馬賽克的實(shí)現(xiàn)原理是把圖像上某個像素點(diǎn)一定范圍鄰域內(nèi)的所有點(diǎn)用鄰域內(nèi)隨機(jī)選取的一個像素點(diǎn)的顏色代替,這樣可以模糊細(xì)節(jié),但是可以保留大體的輪廓。

以下OpenCV程序?qū)崿F(xiàn)馬賽克效果,通過鼠標(biāo)左鍵在圖像上劃定馬賽克的矩形框。

#include <core\core.hpp> 
#include <highgui\highgui.hpp> 
 
using namespace cv; 
 
Mat imageSourceCopy; //原始圖像 
Mat imageSource; //原始圖像拷貝 
int neightbourHood = 9; //馬賽克上每個方框的像素大小 
 
RNG rng; 
int randomNum; //鄰域內(nèi)隨機(jī)值 
 
Point ptL; //左鍵按下時(shí)坐標(biāo) 
Point ptR; //右鍵按下時(shí)坐標(biāo) 
 
//鼠標(biāo)回掉函數(shù) 
void onMouse(int event, int x, int y, int flag, void *ustg); 
 
int main() 
{ 
  imageSourceCopy = imread("Test.jpg"); 
  imageSource = imageSourceCopy.clone(); 
  //imshow("馬賽克", imageSourceCopy); 
  namedWindow("馬賽克"); 
  setMouseCallback("馬賽克", onMouse); 
  waitKey(); 
} 
 
void onMouse(int event, int x, int y, int flag, void *ustg) 
{ 
  if (event == CV_EVENT_LBUTTONDOWN) 
  { 
    ptL = Point(x, y); 
  } 
  if (event == CV_EVENT_LBUTTONUP) 
  { 
    //對鼠標(biāo)畫出的矩形框超出圖像范圍做處理,否則會越界崩潰 
    x > imageSource.cols - 2 * neightbourHood ? x = imageSource.cols - 2 * neightbourHood : x = x; 
    y > imageSource.rows - 2 * neightbourHood ? y = imageSource.rows - 2 * neightbourHood : y = y; 
 
    //對鼠標(biāo)從右下往右上畫矩形框的情況做處理 
    ptR = Point(x, y); 
    Point pt = ptR; 
    ptR.x < ptL.x ? ptR = ptL, ptL = pt : ptR = ptR; 
    for (int i = 0; i < ptR.y - ptL.y; i += neightbourHood) 
    { 
      for (int j = 0; j < ptR.x - ptL.x; j += neightbourHood) 
      { 
        randomNum = rng.uniform(-neightbourHood / 2, neightbourHood / 2); 
        Rect rect = Rect(j + neightbourHood + ptL.x, i + neightbourHood + ptL.y, neightbourHood, neightbourHood); 
        Mat roi = imageSourceCopy(rect); 
        Scalar sca = Scalar( 
          imageSource.at<Vec3b>(i + randomNum + ptL.y, j + randomNum + ptL.x)[0], 
          imageSource.at<Vec3b>(i + randomNum + ptL.y, j + randomNum + ptL.x)[1], 
          imageSource.at<Vec3b>(i + randomNum + ptL.y, j + randomNum + ptL.x)[2]); 
        Mat roiCopy = Mat(rect.size(), CV_8UC3, sca); 
        roiCopy.copyTo(roi); 
      } 
    } 
  } 
  imshow("馬賽克", imageSourceCopy); 
  waitKey(); 
} 

可以通過改變程序中neightbourHood參數(shù)的大小調(diào)整小矩形快的大小,實(shí)現(xiàn)效果:

二、毛玻璃效果

毛玻璃效果的實(shí)現(xiàn)通過用像素點(diǎn)鄰域內(nèi)隨機(jī)一個像素點(diǎn)的顏色替代當(dāng)前像素點(diǎn)的顏色實(shí)現(xiàn)。

#include <core\core.hpp> 
#include <highgui\highgui.hpp> 
 
using namespace cv; 
 
int main() 
{ 
  Mat imageSource = imread("Test.jpg"); 
  Mat imageResult = imageSource.clone(); 
  RNG rng; 
  int randomNum; 
  int Number = 5; 
 
  for (int i = 0; i < imageSource.rows - Number; i++) 
    for (int j = 0; j < imageSource.cols - Number; j++) 
    { 
      randomNum = rng.uniform(0, Number); 
      imageResult.at<Vec3b>(i, j)[0] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[0]; 
      imageResult.at<Vec3b>(i, j)[1] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[1]; 
      imageResult.at<Vec3b>(i, j)[2] = imageSource.at<Vec3b>(i + randomNum, j + randomNum)[2]; 
    } 
  imshow("毛玻璃效果", imageResult); 
  waitKey(); 
} 

實(shí)現(xiàn)效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。 

相關(guān)文章

最新評論

榆林市| 寻甸| 宜兰市| 宁陵县| 潮州市| 临武县| 祁东县| 山西省| 漠河县| 绥宁县| 湘西| 商河县| 修文县| 通江县| 申扎县| 高台县| 繁峙县| 左权县| 西青区| 澜沧| 平安县| 廊坊市| 平泉县| 阿坝| 林甸县| 宿迁市| 锡林浩特市| 收藏| 蓝田县| 漠河县| 尖扎县| 商南县| 山阳县| 新晃| 柳江县| 金川县| 青浦区| 芮城县| 盐亭县| 宝山区| 宝鸡市|