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当作容器的。出现的问题都是内存的问题 怎么解决 展开
#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-03
展开全部
我也遇到了类似的问题,后来还是用数组的方式写的代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询