代码含义

image->imageData+image->widthStep*i)[j] 就是得到image图像中第i行第j列的像素值。

一开始ptr[Rows] = 255;显示的结果不是中心50*50区域,后来查阅资料得知要用三通道的表达方式

ptr[3 * Rows] = 0;//R
ptr[3 * Rows + 1] = 0;//G
ptr[3 * Rows + 2] = 0;//B

完整代码如下:

#include "stdafx.h"
#include "convert.h"
#include "convertDlg.h"
#include "afxdialogex.h"
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
#include <cxcore.h>
#include <stdbool.h>
//#include "CvvImage.h"#ifdef _DEBUG
#define new DEBUG_NEW
#endifIplImage *src = NULL;
IplImage *src1 = NULL;
IplImage *dst = NULL;
IplImage *MultiImage = NULL;// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:CAboutDlg();// 对话框数据
#ifdef AFX_DESIGN_TIMEenum { IDD = IDD_ABOUTBOX };
#endifprotected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
protected:DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()// CconvertDlg 对话框CconvertDlg::CconvertDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_CONVERT_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CconvertDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CconvertDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_BUTTON1, &CconvertDlg::OnBnClickedButton1)//ON_BN_CLICKED(IDC_BUTTON2, &CconvertDlg::OnBnClickedButton2)ON_BN_CLICKED(IDC_BUTTON2, &CconvertDlg::OnBnClickedButton2)
END_MESSAGE_MAP()// CconvertDlg 消息处理程序BOOL CconvertDlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != nullptr){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);            // 设置大图标SetIcon(m_hIcon, FALSE);        // 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}void CconvertDlg::OnSysCommand(UINT nID, LPARAM lParam)
{if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialogEx::OnSysCommand(nID, lParam);}
}// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。void CconvertDlg::OnPaint()
{if (IsIconic()){CPaintDC dc(this); // 用于绘制的设备上下文SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialogEx::OnPaint();}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CconvertDlg::OnQueryDragIcon()
{return static_cast<HCURSOR>(m_hIcon);
}void CconvertDlg::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码unsigned char cWaitKeyValue, Rows, Cols;src = cvLoadImage("1.png", 1);//src = cvCreateImage(cvSize(100, 100), IPL_DEPTH_8U, 1);//cvZero(src);int nHeight;int nWidth;nHeight = src -> height;nWidth = src -> width;char *ptr = NULL;for (Cols = ((nWidth / 2) - 25); Cols < ((nWidth / 2) +25); Cols++){ptr = src->imageData + Cols * src->widthStep;for (Rows = ((nHeight / 2) -25); Rows < ((nHeight / 2) + 25); Rows++){ptr[3 * Rows] = 0;//Rptr[3 * Rows + 1] = 0;//Gptr[3 * Rows + 2] = 0;//B//ptr[Rows] = 255;}}cvNamedWindow("Filter", 1);cvShowImage("Filter", src);cvWaitKey(0);}void CconvertDlg::OnBnClickedButton2()
{// TODO: 在此添加控件通知处理程序代码src1 = cvLoadImage("1.png", 1);cvNamedWindow("original", 1);cvShowImage("original", src1);cvWaitKey(0);}

运行结果

opencv:image-imageData+image-widthStep*i)[j]表达式含义相关推荐

  1. R语言的模型表达式含义解析

    专注系列化.高质量的R语言教程 推文索引 | 联系小编 | 付费合集 本篇介绍各式各样的模型表达式的含义,主要参考资料是<An Introduction to R>(链接:https:// ...

  2. @Scheduled cron 定时任务表达式含义用法及* ?的区别

    ** @Scheduled cron 定时任务表达式含义用法及* ?的区别 ** cron格式:[秒数][分钟][小时][日期][月份][星期几][年份(可省略)] 关于[日期]与[星期几]的说明: ...

  3. OpenCV里IplImage的widthStep参数 和width参数

    一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!(为了快速访问,要内存对齐啊)查看OpenCV2.1的源码,在src/cxcore/cxarr ...

  4. C# Lambda表达式含义及各种写法

    Lambda表达式在各个语言中的表达方式都不太相同,本文重点介绍C#的Lambda表达式. 首先,Lambda表达式就是一个匿名的方法/函数. 以下面的一个完整版作为例子,前面是参数,后面是返回值: ...

  5. python+opencv中imread函数第二个参数的含义

    = 0: 灰度图 0:三通道彩色图 <0:原图,带alpha通道

  6. C#调用open cv函数

    首先介绍一下自己的情况,2010年的3月份开始接触学习C#编程,之前C#和OpenCV都是零基础,由于全都是自学进度比较慢,中间也走了不少弯路.进过三个月自己的学习与探索,对C#中使用OpenCV也算 ...

  7. EmguCV 一些基本操作

    一.先是在程序中图像的导入,我是根据图像路径实现,其中path是string类型,是图像路径. IntPtr img=CvInvoke.cvLoadImage(path, Emgu.CV.CvEnum ...

  8. opencv视频处理和检测学习总结

    基于opencv的视频处理--基础数据结构 在一个封装的还算比较好的库中,一般都不会直接采用那些基本的数据结构像char, int 之类,一是 不具有可读性,二是不方便修改移植.通常是通过typede ...

  9. opencv中CV_IMAGE_ELEM的用法读取每个像素

    可以使用OpenCV定义的宏来提取象素值 假设灰度图像image,存取其i行j列的象素可以这样:CV_IMAGE_ELEM(image, uchar,y, x) 如果是彩色图像就是 CV_IMAGE_ ...

  10. OpenCv像素点获取与修改

    1.matlab获取彩色图像像素值的方法 img=imread('test.jpg'); img1=img(:,:,1); img2=img(:,:,2); img3=img(:,:,3); 三通道排 ...

最新文章

  1. flash 遮罩层全解
  2. 目标检测中准确率accuracy的计算(precision是精度、查准率)(Recall是召回率、查全率)
  3. when to book didi?
  4. @MySQL的存储引擎
  5. 关于图连通性的几道题(水)
  6. Java_WEB项目OOM(OutOfMemError内存溢出) MyEclipse配置Jvm内存
  7. 日志分析linux命令
  8. 深度学习笔记(23) 卷积维度
  9. export_symbol能对变量使用吗_美缝剂能代替玻璃胶使用吗?
  10. 输入符号,宽,高,打印此符号组成的矩形
  11. axure 发布 主页_车队如何在黑鸟APP发布同城活动?教程来了!
  12. python写入文件出现空行
  13. 经纬度校验、整数和小数校验
  14. 深入了解C/C++开发就业前景如何?
  15. 基于STM32的四足机器人
  16. c语言代码存放的区域 堆栈,C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)...
  17. kali linux 通过粘贴板攻击对方服务器
  18. JS如何获取屏幕、浏览器及网页高度宽度?
  19. 鄂汇办2021高考成绩查询,2021湖北高考成绩查询时间 湖北高考成绩查询方式
  20. 吉林大学人工智能学院计算机,吉林大学成立人工智能学院

热门文章

  1. 【PyCharm 使用指南】之汉化插件(官方提供)
  2. 基于.net的学校图书管理系统
  3. 使用补丁修改DSDT/SSDT [DSDT/SSDT综合教程]
  4. 笔记本安装黑苹果后无法调节亮度的解决办法 | 小太阳
  5. Oracle 日期时间函数大全
  6. mac office中字体
  7. redis 内存碎片清理
  8. html5期末大作业:基于html+css+javascript+jquery+bootstarp响应式图书电商HTML模板网上书店(25页)
  9. 1200兆路由器网速_办个100M的网,买一个1200M的路由器回家,网速真的会变快吗?...
  10. 如何更改springboot的tomcat版本