OpenCV实现马赛克和毛玻璃滤镜效果-创新互联-成都快上网建站

OpenCV实现马赛克和毛玻璃滤镜效果-创新互联

本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码,供大家参考,具体内容如下

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:主机域名、网页空间、营销软件、网站建设、奉节网站维护、网站推广。

一、马赛克效果

马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替,这样可以模糊细节,但是可以保留大体的轮廓。

以下OpenCV程序实现马赛克效果,通过鼠标左键在图像上划定马赛克的矩形框。

#include  
#include  
 
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(i + randomNum + ptL.y, j + randomNum + ptL.x)[0], 
          imageSource.at(i + randomNum + ptL.y, j + randomNum + ptL.x)[1], 
          imageSource.at(i + randomNum + ptL.y, j + randomNum + ptL.x)[2]); 
        Mat roiCopy = Mat(rect.size(), CV_8UC3, sca); 
        roiCopy.copyTo(roi); 
      } 
    } 
  } 
  imshow("马赛克", imageSourceCopy); 
  waitKey(); 
}

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:OpenCV实现马赛克和毛玻璃滤镜效果-创新互联
分享URL:http://kswjz.com/article/ddgeoj.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流