opencv(2)掩膜操作

1、掩膜操作

掩膜操作是根据掩膜来重新计算每个像素的值

A[i,j]=5*B[i,j]-(B[i-1,j]+B[i+1,j]+B[i,j-1]+B[i,j+1]);

用上述处理的提高对比度

其他的掩膜可参看https://wenku.baidu.com/view/bc1407d6b14e852458fb57cd.html

2、获取图像的指针

const uchar* d = scr.ptr<uchar>(i); //获取scr内第i行的指针。

3、处理越界的像素

saturate_cast<uchar>(-1)=0;
saturate_cast<uchar>(122)=122;
saturate_cast<uchar>(300)=255;

4、直接调用函数

Mat  key = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //定义掩膜
filter2D(scr, ssr, -1, key); //对scr用key进行掩膜操作存到ssr
//-1表示位图深度按源图像

5、代码

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>

using namespace cv;

int main()
{
    Mat scr,dst;
    scr = imread("D:/360.png");
    if (!scr.data)
    {
        printf("找不到图片\n");
        return -1;
    }
    namedWindow("源图像", WINDOW_AUTOSIZE);
    imshow("源图像", scr);

    //dst = scr;
    dst = Mat::zeros(scr.size(), scr.type());
    int cols = (scr.cols - 1)*scr.channels();
    int op = scr.channels();
    int rows = scr.rows;

    for (int i = 1; i < rows - 1; i++)
    {
        const uchar* w = scr.ptr<uchar>(i - 1);
        const uchar* d = scr.ptr<uchar>(i);
        const uchar* s = scr.ptr<uchar>(i + 1);
        uchar* out = dst.ptr<uchar>(i);
        for (int j = op; j < cols; j++)
        {
            out[j] =saturate_cast<uchar>( 5 * d[j] - (w[j] + s[j] + d[j - op] + d[j + op]));
        }
    }

    namedWindow("处理后", WINDOW_AUTOSIZE);
    imshow("处理后", dst);

    Mat ssr, key = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
    filter2D(scr, ssr, -1, key);

    namedWindow("处理后api", WINDOW_AUTOSIZE);
    imshow("处理后api", ssr);
    waitKey(0);
    return 0;
}

6、运行结果

可以看到处理后的图片周围有黑线,因为周围并没有处理赋值。

原文地址:https://www.cnblogs.com/abc1604831024/p/12274843.html

时间: 2024-11-04 10:34:19

opencv(2)掩膜操作的相关文章

(5)opencv的基础操作和矩阵的掩模操作

不懂的,可以简单,看看这个网址:https://blog.csdn.net/xiongwen_li/article/details/78503491 图片放到了桌面,所以,图片的路径就是桌面了,剩余的代码如下 1 #include<iostream> 2 #include<opencv.hpp> 3 4 using namespace std; 5 using namespace cv; 6 7 int main() 8 { 9 //定义两个位图的类 10 Mat sour, de

opencv图像卷积操作

代码: #include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; using namespace std; int main() { Mat src, dst, dst1; double t; //原图 src = imread(".//pic//test.jpg",IMREAD_UNCHANGED); if (src.empty()

如何用OpenCV跟踪鼠标操作

转载:如何用OpenCV跟踪鼠标操作 http://blog.skyoung.org/2014/05/01/how-to-track-mouse/ 在视频第一帧手动标记出目标的位置是在线视觉跟踪中最基本的一个操作,实现这个操作需要检测鼠标的移动和点击事件.OpenCV提供了setMouseCallback这个函数来响应鼠标的动作,并返回鼠标在绑定窗口上的坐标位置.下面就这个函数的使用做一个简单的介绍. 首先,setMouseCallback的C++函数声明如下: 1 void onMouse(i

OpenCV视频序列操作基础

 从视频序列中抓取一帧 OpenCV支持从摄像头或视频文件(AVI)中抓取图像. 从摄像头获取初始化: CvCapture* capture = cvCaptureFromCAM(0); // capture from video device #0 从视频文件获取初始化: CvCapture* capture = cvCaptureFromAVI("infile.avi"); 抓取帧: IplImage* img = 0; if(!cvGrabFrame(capture)){  

[opencv]常用阵列操作函数总结

/*=========================================================================*/ // 阵列操作 /*=========================================================================*/ 基本矩阵和图像运算符 ———————————————————————————————————————————————————————————————————————————

OpenCV 计算机视觉(二)掩膜操作

#include <opencv2/opencv.hpp>#include <iostream>#include <math.h> using namespace cv; int main(int argc, char** argv) { Mat src, dst; src = imread("D:/OpenCVtest/image/hao.jpg"); if (!src.data) {   printf("could not load i

2.opencv图像处理常用操作

图像的平滑处理 平滑,也称 模糊, 平滑处理时需要用到一个滤波器 .滤波器想象成一个包含加权系数的窗口,这个加权系数也叫做核或者模版. '''cpp // 图像平滑处理分而学之.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; const int

OpenCV常用图像操作和鼠标操作(双11版本)

更新日志: 1.添加了自适应窗口大小的功能: 2.添加了在图像上画矩形的功能: 3.添加了在大图上画矩形的功能: 4.部分函数名称更改: 5其他修改. 首先是头文件: /* ******* ccv.h ********** ********* opencv常用操作函数声明 ********** */ /* author: autumoon */ #ifndef _CCV_H_ #define _CCV_H_ #include <afxdlgs.h> //打开文件 #include "

OpenCV常用图像操作和鼠标操作

最近的工作经常需要对图像进行操作,也需要用鼠标对图像进行各种操作,于是自己整理和编写了这个类,总结了常用的基于OpenCV对图像进行的操作. 这个类我也将继续完善和丰富下去,需要的朋友可以直接使用. 如果有什么疏漏的地方还请多多指教. 首先是头文件: /* ******* ccv.h ********** ********* opencv常用操作函数声明 ********** */ /* author: autumoon */ #ifndef _CCV_H_ #define _CCV_H_ #i