鼠标马赛克图像部分区域
这是一个简单的马赛克程序,利用选定矩形区域的平均值代替该区域各点的像素值。大家有没有更好的方法马赛克呢?
- #include <cv.h>
- #include <highgui.h>
- #pragma comment( lib, "cv.lib" )
- #pragma comment( lib, "cxcore.lib" )
- #pragma comment( lib, "highgui.lib" )
- IplImage* org = 0;
- IplImage* img = 0;
- IplImage* tmp = 0;
- IplImage* dst = 0;
- int foo=6;
- void on_mouse( int event, int x, int y, int flags, void* ustc)
- {
- CvPoint p0;
- CvPoint p1;
- if( event == CV_EVENT_MOUSEMOVE && !(flags & CV_EVENT_FLAG_LBUTTON))
- {
- img=cvCloneImage(tmp);
- cvResetImageROI(img);
- if(x<foo)
- {
- if(y<foo)
- {
- p0=cvPoint(0,0);
- p1=cvPoint(2*foo,2*foo);
- }
- else if(y>img->height-foo)
- {
- p0=cvPoint(0,img->height-2*foo);
- p1=cvPoint(2*foo,img->height);
- }
- else
- {
- p0=cvPoint(0,y-foo);
- p1=cvPoint(2*foo,y+foo);
- }
- }
- else if(x>img->width-foo)
- {
- if(y<foo)
- {
- p0=cvPoint(img->width-2*foo,0);
- p1=cvPoint(img->width,2*foo);
- }
- else if(y>img->height-foo)
- {
- p0=cvPoint(img->width-2*foo,img->height-2*foo);
- p1=cvPoint(img->width,img->height);
- }
- else
- {
- p0=cvPoint(img->width-2*foo,y-foo);
- p1=cvPoint(img->width,y+foo);
- }
- }
- else
- {
- if(y<foo)
- {
- p0=cvPoint(x-foo,0);
- p1=cvPoint(x+foo,2*foo);
- }
- else if(y>img->height-foo)
- {
- p0=cvPoint(x-foo,img->height-2*foo);
- p1=cvPoint(x+foo,img->height);
- }
- else
- {
- p0=cvPoint(x-foo,y-foo);
- p1=cvPoint(x+foo,y+foo);
- }
- }
- cvRectangle(img,p0,p1,CV_RGB(0,255,0));
- cvShowImage( "img", img );
- }
- else if( event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON))
- {
- if(x<foo)
- {
- if(y<foo)
- {
- p0=cvPoint(0,0);
- p1=cvPoint(2*foo,2*foo);
- }
- else if(y>img->height-foo)
- {
- p0=cvPoint(0,img->height-2*foo);
- p1=cvPoint(2*foo,img->height);
- }
- else
- {
- p0=cvPoint(0,y-foo);
- p1=cvPoint(2*foo,y+foo);
- }
- }
- else if(x>img->width-foo)
- {
- if(y<foo)
- {
- p0=cvPoint(img->width-2*foo,0);
- p1=cvPoint(img->width,2*foo);
- }
- else if(y>img->height-foo)
- {
- p0=cvPoint(img->width-2*foo,img->height-2*foo);
- p1=cvPoint(img->width,img->height);
- }
- else
- {
- p0=cvPoint(img->width-2*foo,y-foo);
- p1=cvPoint(img->width,y+foo);
- }
- }
- else
- {
- if(y<foo)
- {
- p0=cvPoint(x-foo,0);
- p1=cvPoint(x+foo,2*foo);
- }
- else if(y>img->height-foo)
- {
- p0=cvPoint(x-foo,img->height-2*foo);
- p1=cvPoint(x+foo,img->height);
- }
- else
- {
- p0=cvPoint(x-foo,y-foo);
- p1=cvPoint(x+foo,y+foo);
- }
- }
- dst=cvCloneImage(tmp);
- cvSetImageROI(dst,cvRect(p0.x,p0.y,p1.x-p0.x,p1.y-p0.y));
- CvScalar mean=cvAvg(dst);
- cvSet(dst,mean);
- cvResetImageROI(dst);
- tmp=cvCloneImage(dst);
- cvRectangle(dst,p0,p1,CV_RGB(0,255,0));
- cvShowImage( "img", dst );
- }
- }
- int main()
- {
- org=cvLoadImage("lena.jpg",1);
- img=cvCloneImage(org);
- tmp=cvCloneImage(org);
- dst=cvCloneImage(org);
- cvNamedWindow("img",1);
- cvSetMouseCallback( "img", on_mouse, 0 );
- cvShowImage("img",img);
- cvWaitKey(0);
- cvDestroyAllWindows();
- cvReleaseImage(&org);
- cvReleaseImage(&img);
- cvReleaseImage(&tmp);
- cvReleaseImage(&dst);
- return 0;
- }
效果图如下,这里马赛克了lena图的左眼。
鼠标马赛克图像部分区域相关推荐
- 【Opencv系列】之显示图像以及使用鼠标截取图像局部区域进行放大
序 本文主要介绍通过Opencv显示一副图像,同时又可以使用鼠标左键框选局部区域且放大一倍: 1. 使用IplImage的示例代码 #include <stdio.h> #include ...
- XP中准确对图像分区域着色(转)
XP中准确对图像分区域着色(转) 当在幻灯片中插入图像后,发现图像颜色与幻灯片搭配不合适的话,你也许会使用图像工具栏中的"图像重新着色"命令,不过使用这种方式修改图像颜色时,难以准 ...
- OpenCV后投影,利用阈值函数分割指定区域生成掩膜,通过直方图分布查找其他图像相同区域。
一.API函数 void mixChannels(const Mat* src,int nsrc,Mat* dst ,int ndst,const int* fromTo,size_t npairs) ...
- 显著性图matlab,cvpr14_saliency_code 2014上的关于图像显著性区域的检测matlab代码。 271万源代码下载- www.pudn.com...
文件名称: cvpr14_saliency_code下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 4413 KB 上传时间: 2014-09-07 下载次 ...
- matplotlib可视化基本散点图、在图像指定区域绘制方框(Draw Rectangle)
matplotlib可视化基本散点图.在图像指定区域绘制方框(Draw Rectangle) 目录 matplotlib可视化基本散点图.在图像指定区域绘制方框(Draw Rectangle)
- matplotlib可视化基本散点图、在图像指定区域绘制方框并进行自定义色彩填充(Draw Rectangle filled with color)
matplotlib可视化基本散点图.在图像指定区域绘制方框并进行自定义色彩填充(Draw Rectangle filled with color) 目录
- 如何用python编写一个绘制马赛克图像的自写程序mask = np.zeros
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 这篇教程将会展示如何用python的图形化包"Pygame"和基础的文件I/O来创建一 ...
- Halcon算子--图像、区域、轮廓、测量、拟合、垂足、夹角
Halcon算子–图像.区域.轮廓.测量.拟合.垂足.夹角 read_image (Image,'fabrik') 画矩形 draw_rectangle1 (3600, Row1, Column1, ...
- 图像有用区域 bfs
图像有用区域 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 "ACKing"同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑 ...
最新文章
- js怎么实现对html代码加密解密,javascript脚本加密解密及HTML转JS
- python的scripts里没有pip_解决python scripts和pip缺失问题
- 社交背水一战?校园日记背后,支付宝野心你真能懂?
- p1164【立方体求和】
- element-ui 可复选树型表格
- 填补服务机器人市场空白,九号机器人提供智能服务场景解决方案!
- java平方和和立方和3_平方和与立方和
- Python——腾讯在线编程题(2018)
- PE格式第七讲,重定位表
- PoEdu - Windows阶段班 【Po学校】Windows编程 Lesson004_003-2 文件操作
- 基于Socket实现网络编程
- 维纳滤波法matlab代码,完整的维纳滤波器Matlab源程序
- Mockplus原型设计工具介绍
- 数据智仓功能介绍(一)
- 剑指offer | 面试题10:斐波那切数列
- 提问的智慧 - 艾瑞克.史蒂文.雷蒙德(Eric Steven Raymond)
- 合数python_python输出100以内的质数与合数
- python中经常使用的包扎材料_以下哪些是经常使用的包扎材料:
- RocketMQ 集群告警
- 网站架构优化性能概念
热门文章
- 10个重要的Linux ps命令实战
- linux内核中的GPIO系统之(2):pin control subsystem
- Android关机流程源码分析
- 在WINCE5.0开始菜单中添加应用程序
- python内置数字类型转换函数_Python学习 Day2-2 Python3的基本数据类型、数据内置类型转换函数...
- AIDL 客户端与服务端的双向通信
- 大数据时代的新型数据库 — 图数据库 Neo4j 的应用
- linux中rpm命令管理
- Cocos2d-x 基础元素
- asp.net treeView 节点 点击 变色