指定区域内图像颜色反转
2013-03-11 17:21
253 查看
#include "stdafx.h" #include <stdio.h> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; Rect selection; int select_object; /* prototype declaration */ void on_mouse(int event, int x, int y, int flags, void* param); int main(int argc, char *argv[]) { // (1)load a source image as is const char *imagename = argc > 1 ? argv[1] : "../image/fruit.png"; Mat src_img = imread(imagename, -1); if(!src_img.data) return -1; // (2)create a window and set the callback function for mouse events namedWindow("Image", 1); cvSetMouseCallback("Image", (CvMouseCallback)(&on_mouse), &src_img); // (3)show the source image with an invert area, and quit when 'esc' pressed while(1) { Mat dst_img = src_img.clone(); if(select_object && selection.width > 0 && selection.height > 0) { Mat roi(dst_img, selection); bitwise_xor(roi, Scalar::all(255), roi); } imshow("Image", dst_img); int key = waitKey(10); if((char)key==27) break; } return 0; } void on_mouse(int event, int x, int y, int flags, void* param) { static Point2i origin; Mat *img = static_cast<Mat*>(param); // (4)calculate coordinates of selected area (by Click and Drag) if(select_object) { selection.x = CV_IMIN(x, origin.x); selection.y = CV_IMIN(y, origin.y); selection.width = selection.x + CV_IABS(x - origin.x); selection.height = selection.y + CV_IABS(y - origin.y); selection.x = CV_IMAX(selection.x, 0); selection.y = CV_IMAX(selection.y, 0); selection.width = CV_IMIN( selection.width, img->cols ); selection.height = CV_IMIN( selection.height, img->rows ); selection.width -= selection.x; selection.height -= selection.y; } // (5)process a start and a finish selecting events (i.e. button-up and -down) switch(event) { case CV_EVENT_LBUTTONDOWN: origin = Point2i(x,y); selection = Rect(x, y, 0, 0); select_object = 1; break; case CV_EVENT_LBUTTONUP: select_object = 0; break; } }
相关文章推荐
- OpenCV图像剪切,超出图像区域指定颜色填充
- Matlab图像剪切,超出图像区域指定颜色填充
- 分割图像并指定多个灰度阀值,对同一幅图像进行分区域的二值化
- java图像处理-(指定区域内)灰度化、透明化(alpha通道)处理
- 使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
- 线性混合实现函数 指定区域线性图像混合 addWeighted函数 感兴趣区域RO 实现自定义区域的线性混合
- IOS 获取图像指定点的颜色(UIColor)
- opencv把一个图像的一小块区域拷贝到另一个图像的指定区域
- OpenCV-009:识别摄像头图像中的指定颜色并显示
- YUV420如何扣取指定区域的图像数据
- 对图像进行随意指定区域切图,还有其它一些图像操作的功能,并不断完善中
- 使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
- OpenCV反向投影cvCalcBackProject的示例,用图像中某中颜色的区域
- android canvas 绘制 Cirle 以外的区域为指定颜色
- 在Android上实现图像颜色过滤与反转
- IOS 截取指定区域的图像
- 图像处理之基础---肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
- iOS实现图像指定区域模糊
- 图像处理之基础---高斯低通滤波在指定区域画放大圆形图
- 【OpenCV3】将图像指定区域使用另一图像(或ROI)覆盖