91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV實現馬賽克和毛玻璃濾鏡效果

發布時間:2020-08-31 15:12:40 來源:腳本之家 閱讀:210 作者:-牧野- 欄目:編程語言

本文為大家分享了OpenCV實現馬賽克和毛玻璃濾鏡的具體代碼,供大家參考,具體內容如下

一、馬賽克效果

馬賽克的實現原理是把圖像上某個像素點一定范圍鄰域內的所有點用鄰域內隨機選取的一個像素點的顏色代替,這樣可以模糊細節,但是可以保留大體的輪廓。

以下OpenCV程序實現馬賽克效果,通過鼠標左鍵在圖像上劃定馬賽克的矩形框。

#include <core\core.hpp> 
#include <highgui\highgui.hpp> 
 
using namespace cv; 
 
Mat imageSourceCopy; //原始圖像 
Mat imageSource; //原始圖像拷貝 
int neightbourHood = 9; //馬賽克上每個方框的像素大小 
 
RNG rng; 
int randomNum; //鄰域內隨機值 
 
Point ptL; //左鍵按下時坐標 
Point ptR; //右鍵按下時坐標 
 
//鼠標回掉函數 
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) 
  { 
    //對鼠標畫出的矩形框超出圖像范圍做處理,否則會越界崩潰 
    x > imageSource.cols - 2 * neightbourHood ? x = imageSource.cols - 2 * neightbourHood : x = x; 
    y > imageSource.rows - 2 * neightbourHood ? y = imageSource.rows - 2 * neightbourHood : y = y; 
 
    //對鼠標從右下往右上畫矩形框的情況做處理 
    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參數的大小調整小矩形快的大小,實現效果:

OpenCV實現馬賽克和毛玻璃濾鏡效果

二、毛玻璃效果

毛玻璃效果的實現通過用像素點鄰域內隨機一個像素點的顏色替代當前像素點的顏色實現。

#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(); 
} 

實現效果:

OpenCV實現馬賽克和毛玻璃濾鏡效果

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

福贡县| 东海县| 大渡口区| 潢川县| 眉山市| 凉城县| 万安县| 莱阳市| 赣州市| 通化县| 张北县| 行唐县| 西宁市| 双城市| 堆龙德庆县| 宝坻区| 会泽县| 高清| 宣武区| 来凤县| 高台县| 光山县| 盘锦市| 拉萨市| 富蕴县| 广丰县| 丰镇市| 湖州市| 崇礼县| 大理市| 团风县| 沁水县| 九江县| 石城县| 乌鲁木齐县| 名山县| 宜阳县| 大埔区| 即墨市| 淳化县| 灵璧县|