OpenCV学习之图像域的填充
来源:互联网 发布:php html页面生成图片 编辑:程序博客网 时间:2024/05/16 19:19
鼠标点击图像,像Photoshop选区工具一样选区相似图像区域,进行填充颜色
//图像域的填充#include "cv.h"#include "highgui.h"IplImage* color_img0;IplImage* mask;IplImage* color_img;IplImage* gray_img0 = NULL;IplImage* gray_img = NULL;int ffill_case = 1;int lo_diff = 20;int up_diff = 20;int connectivity = 4;int is_color = 1;int is_mask = 0;int new_mask_val = 255;void on_mouse(int event, int x, int y, int flags, void* param) { //鼠标事件 if (!color_img) { return; } switch (event) { case CV_EVENT_LBUTTONDOWN: { CvPoint seed = cvPoint(x, y); int lo = ffill_case == 0 ? 0 : lo_diff; int up = ffill_case == 0 ? 0 : up_diff; int flags = connectivity + (new_mask_val << 8) + (ffill_case == 1 ? CV_FLOODFILL_FIXED_RANGE : 0); int b = rand() & 255, g = rand() & 255, r = rand() & 255; CvConnectedComp comp; if (is_mask) cvThreshold(mask, mask, 1, 128, CV_THRESH_BINARY); if (is_color) { CvScalar color = CV_RGB(r, g, b); cvFloodFill(color_img, seed, color, CV_RGB(lo, lo, lo), CV_RGB(up, up, up), &comp, flags, is_mask ? mask : NULL); cvShowImage("image", color_img); } else { CvScalar brightness = cvRealScalar((r * 2 + g * 7 + b + 5) / 10); cvFloodFill(gray_img, seed, brightness, cvRealScalar(lo), cvRealScalar(up), &comp, flags, is_mask ? mask : NULL); cvShowImage("image", gray_img); } printf("%g pixels were repainted\n", comp.area); if (is_mask) cvShowImage("mask", mask); } break; }}int main(int argc, char** argv) { color_img0 = cvLoadImage("Lena.tiff", 1); printf("Hot Keys:\n" "\ESC - quit\n" "\tc - switch color/grayscale mode\n" "\tm - switch mask mode\n" "\tr - restore the original image\n" "\ts - use null-range floodfill\n" "\tf - use gradient floodfill with fixed(absolute) rangle\n" "\tg - use gradient floodfill with floating(relative) range\n" "\t4 - use4-connectivity mode\n" "\t8 - use8-connectivity mode\n"); color_img = cvCloneImage(color_img0); gray_img0 = cvCreateImage(cvGetSize(color_img), 8, 1); cvCvtColor(color_img, gray_img0, CV_BGR2GRAY); gray_img = cvCloneImage(gray_img0); mask = cvCreateImage(cvGetSize(color_img), 8, 1); cvNamedWindow("image", 0); cvCreateTrackbar("lo_diff", "image", &lo_diff, 255, NULL); cvCreateTrackbar("up_diff", "image", &up_diff, 255, NULL); //鼠标事件 cvSetMouseCallback("image", on_mouse, 0); while (1) { int c; if (is_color) cvShowImage("image", color_img); else cvShowImage("image", gray_img); c = cvWaitKey(0); switch ((char)c) { case '\x1b': goto exit_main; case 'c': if (is_color) { printf("\tc - switch color/grayscale mode\n"); cvCvtColor(color_img, gray_img, CV_BGR2GRAY); is_color = 0; } else { cvCopy(color_img0, color_img, NULL); cvZero(mask); is_color = 1; } break; case 'm': if (is_mask) { cvDestroyWindow("mask"); is_mask = 0; } else { cvNamedWindow("mask", 0); cvZero(mask); cvShowImage("mask", mask); is_mask = 1; } break; case 'r': cvCopy(color_img0, color_img, NULL); cvCopy(gray_img0, gray_img, NULL); cvZero(mask); break; case 's': ffill_case = 0; break; case 'f': ffill_case = 1; break; case 'g': ffill_case = 2; case '4': connectivity = 4; break; case '8': connectivity = 8; break; } }exit_main: cvDestroyWindow("test"); cvReleaseImage(&gray_img); cvReleaseImage(&gray_img0); cvReleaseImage(&color_img); cvReleaseImage(&color_img0); cvReleaseImage(&mask); return 1;}
阅读全文
0 0
- OpenCV学习之图像域的填充
- opencv学习(三十一)之图像边缘像素填充估计copyMakeBorder()
- opencv图像边界的填充
- OpenCV学习——图像填充
- opencv 二值图像的孔洞填充
- 图像域的填充
- 图像边界填充OpenCV
- Opencv学习之图像的矩
- OpenCV学习之图像的直方图
- opencv学习(9)漫水填充、图像金字塔、阈值化的介绍
- Opencv学习之漫水填充算法
- Opencv学习之图像的均衡化、二值化图像
- 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标
- OpenCV学习之图像操作
- opencv学习之遍历图像
- opencv学习之图像修补
- opencv学习之图像滤波
- Opencv学习之图像直方图
- Android之NetworkOnMainThreadException异常
- java 远程文件 下载
- Webservice调用与发布
- mysql入门
- H5面试----简述一下src与href的区别
- OpenCV学习之图像域的填充
- win7 64位旗舰版系统运行regsvr32.exe提示版本不兼容
- 【LeetCode】002. Add Two Numbers
- cf424c 亦或交换律 模循环节 亦或前缀和
- 项目管理学习总结(4)——项目团队,如何展开有效沟通?
- 3、spring集成quartz
- python常用模块之random模块
- ATLCOM服务端连接点,advise返回CONNECT_E_CANNOTCONNECT的一个可能原因
- 只有程序员能听懂的笑话,你知道几个?