vs 2010 C++ 的Opencv 图像的像素值提取和遍历的问题

#include"opencv2/opencv.hpp"#include<opencv2/core/core.hpp>#include<highgui.h>#includ... #include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <highgui.h>
#include<cmath>
#include <algorithm>
#include <iostream>
using namespace cv;
using namespace std;
//计算四个方向上的灰度值均差、方差之间的关系。
int main(){
Mat grayimage = imread("C:\\Users\\LPX\\Desktop\\渗水和剥落\\t.jpg", 1);
//检查是否读入图片
if( grayimage.empty() )
{
cout << "Can not load image." << endl;
return -1;
}
cvtColor(grayimage, grayimage, CV_BGR2GRAY);
//int m=grayimage.channels();

//namedWindow("gray");
//imshow("gray",grayimage);
int COL=grayimage.cols;
int ROW=grayimage.rows;
//double CTA;///////////
Scalar MEAN;
Scalar SIGMA;
meanStdDev(grayimage,MEAN,SIGMA);
double D=sqrt(pow(MEAN.val[0],2)+ pow(SIGMA.val[0],2));
//cout<<D<<endl;
int d=5;
int height;
int width;
for(height=0;height<=ROW;height++){
for(width=0;width<=COL;width++){
std::vector<int>Orient_45;
for (int k=0;k<=2*d+1;k++){
// 计算45度方向的值
int height_45=height-d+k-1;
if( height_45<0)
height_45=0;
if (height_45>ROW)
height_45=ROW;
int width_45=width+dk+1;
if (width_45<0)
width_45=0;
if (width_45>COL)
width_45=COL;

int m=grayimage.at<uchar>(height_45,width_45);///////////////
Orient_45.push_back(m);}}}
waitKey(0);
system("pause");
return 0;
}

问题主要集中在循环体内,我想提取一个一幅图片某一个像素四十五方向上的像素工10个点,我用的是vector当作容器的。出现的问题都是内存的问题 怎么解决
展开
 我来答
斜飞雁阵降东南
2016-07-09 · 超过23用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:64.5万
展开全部
如下修改即可,矩阵越界了。
if (height_45>=ROW)
height_45=ROW-1;
if (width_45>=COL)
width_45=COL-1;

下面这句你写错了吧。
int width_45=width+dk+1;

估计是这样的
int width_45=width+d-k+1;
匿名用户
2016-07-03
展开全部
我也遇到了类似的问题,后来还是用数组的方式写的代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式