精华内容
下载资源
问答
  • opencv 读取像素值

    2014-07-16 10:05:21
    话不多说,新手在不断学习,刚刚看见读取每个像素很是好奇。 #include #include using namespace std; int main() { IplImage* src = cvLoadImage("e:/11.bmp",CV_LOAD_IMAGE_COLOR); //方法一:...
    话不多说,新手在不断学习,刚刚看见读取每个像素点值很是好奇。
    
    #include <highgui.h>
    #include <iostream>
    using namespace std;

    int main()
    {
    IplImage* src = cvLoadImage("e:/11.bmp",CV_LOAD_IMAGE_COLOR);
    //方法一:
    CvScalar s = cvGet2D(src,200,201);//获取像素点为(201,200)点的BGR的值 
    //注:此处的x,y值是反的,具体不解释
    cout<<s.val[0]<<'\t'<<s.val[1]<<'\t'<<s.val[2]<<endl;//输出B值,G值,R值

    //方法二:此处输出的时候进行强制类型转换就可以得到和上面一样的值。不能直接输出uchar?
    //坐标(200,201)的像素值
    cout<<(int)((uchar*)(src->imageData+200*src->widthStep))[3*201]<<endl;
    cout<<(int)((uchar*)(src->imageData+200*src->widthStep))[3*201+1]<<endl;
    cout<<(int)((uchar*)(src->imageData+200*src->widthStep))[3*201+1]<<endl;

    cvReleaseImage(&src);

    return 0;

    *************************************************************
    http://wenku.baidu.com/view/5cc06af8910ef12d2af9e74c.html(参考百度文库)

    1.使用cvGet2D()函数访问:

    cvGet*D系列函数可以用来返回特定位置的数组元素(一般使用cvGet2D),原型如下:
    CvScalar cvGet1D( const CvArr* arr, int idx0 );  
    CvScalar cvGet2D( const CvArr* arr, int idx0, int idx1 )
    CvScalar cvGet3D( const CvArr* arr, int idx0, int idx1, int idx2 ); 
    CvScalar cvGetND( const CvArr* arr, int* idx ); 
    idx0,idx1,idx2分别用来指示元素数组下标,即cvGet2D返回(idx0,idx1)处元素的值。
    可以通过如下方法访问一个图片的所有像素点:
    假设图像加载完毕!
    CvScalar t1,t2;
    for(int i = 0;i < img->height;i++)
     {
      for(int j = 0;j < img->width;j++)
      {     
       t2=cvGet2D(img,i,j);
    此时t2中的值就是当前像素点rgb值,注意此时的t2.val[0]为b通道
                                                   t2.val[1]为g
                                                   t2.val[2]为r
    此时就能获取当前像素点的bgr了。
    可以通过如下方式更改当前像素点的rgb通道值。
       t1.val[0]=0;  b
       t1.val[1]=0;  g
       t1.val[2]=0;  r
       cvSet2D(img,i,j,t1);
      }
    不过通过上诉方法在速度方面会比较慢。可以通过如下方法加快访问,更改速度。

    2.直接访问:

    Iplimage成员有:

    1. int  nSize;           
    2.         int  ID;              
    •         int  nChannels;       
    •         int  alphaChannel;    
    •         int  depth;           
    •         char colorModel[4];   
    •         char channelSeq[4];   
    •         int  dataOrder;       
    •         int  origin;          
    •         int  align;           
    •         int  width;           
    •         int  height;          
    •         struct _IplROI *roi;  
    •         struct _IplImage *maskROI;   
    •         void  *imageId;       
    •         struct _IplTileInfo *tileInfo;   
    •         int  imageSize;       
    •         char *imageData;    
    •         int  widthStep;     
    •         int  BorderMode[4];   
    •         int  BorderConst[4];   
    •         char *imageDataOrigin;   

    比较重要的两个元素是:char *imageData以及widthStep。imageData存放图像像素数据,而widStep类似CvMat中的step,表示以字节为单位的行数据长度。

    多通道(三通道)字节图像中,imageData排列如下:         

     
    IplImage* img=cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,3);
    uchar* data=(uchar *)img->imageData;
    int step = img->widthStep/sizeof(uchar);     step即为上图的widthstep
    int channels = img->nChannels;             这个图片为3通道的
    uchar *b,*g,*r;
    for(int i=0;iheight;i++)
         for(int j=0;jwidth;j++){
               *b=data[i*step+j*chanels+0];    此时可以通过更改bgr的值达到访问效果。
               *g=data[i*step+j*chanels+1];
               *r=data[i*step+j*chanels+2];
          }

    i*step     当i=0 即为上图的第一行   为1就是第二行  

    j*chanels+0  j*通道数当j=0为第一列的第0个通道->b   

    j*channels+1         当j=1为第二列的第1个通道->g

    虽然第一种跟第二种的时间复杂度是相同的。但是第二种的速度明显比第一种快很多。

    追求速度就选用第二种!



    展开全文
  • OpenCV常用读取像素方法及读取速度对比 法一 指针法(效率最高) void main() { //灰度图 Mat src = imread("src.jpg", 0); //图像行、列 int row = src.rows, col = src.cols; for (int i = 0; i < row; i+...

    OpenCV常用读取像素方法及读取速度对比

    法一 指针法(效率最高)

    void main()
    {
    	//灰度图
    	Mat src = imread("src.jpg", 0);
    	//图像行、列
    	int row = src.rows, col = src.cols;
    	for (int i = 0; i < row; i++)
    	{
    		//读取整行数据
    		uchar* ptr = src.ptr<uchar>(i);
    		for (int j = 0; j < col; j++)
    		{
    			int pixel = (int)ptr[j];
    			cout << pixel << "    ";
    		}
    		cout << endl;
    	}
    }
    

    法二

    void main()
    {
    	//灰度图
    	Mat src = imread("src.jpg", 0);
    	//图像行、列
    	int row = src.rows, col = src.cols;
    	for (int i = 0; i < row; i++)
    	{
    		for (int j = 0; j < col; j++)
    		{
    			int pixel = (int)src.ptr<uchar>(i, j);
    			cout << pixel << "    ";
    		}
    		cout << endl;
    	}
    }
    

    法三

    void main()
    {
    	//灰度图
    	Mat src = imread("src.jpg", 0);
    	//图像行、列
    	int row = src.rows, col = src.cols;
    	for (int i = 0; i < row; i++)
    	{
    		for (int j = 0; j < col; j++)
    		{
    			int pixel = (int)src.at<uchar>(i,j);
    			cout << pixel << "    ";
    		}
    		cout << endl;
    	}
    }
    
    展开全文
  • openCV读取像素值三种基本方法

    千次阅读 2019-02-23 13:57:03
    uchar value =grayim.at&amp;lt;uchar&amp;gt;(i,j); for ( int i = 0 ;i&amp;lt;grayim.rows;++i) for(int j =0;j&amp;lt;grayim.cols;++j) grayim.at&amp;lt;uchar&... for

    1

    uchar value =grayim.at<uchar>(i,j);
    for ( int i = 0 ;i<grayim.rows;++i)
    	for(int j =0;j<grayim.cols;++j)
    		grayim.at<uchar>(i,j) = (i+j)%255;
    for( int i=0;i<colorim.rows;++i)
    	for(int j =0;j<colorim.cols;++j)
    	{
    	Vec3b pixel;
    	pixel[0] =i%255;//Blue
    	pixel[1] =j%255;//Green
    	pixel[2] =0;//Red
    	colorim.at<Vec3b>(i,j) =pixel;
    	}
    

    2使用迭代器

    cv::Mat Iterator_<uchar>grayit,grayend;
    for(grayit = grayim.begin<uchar>(),grayend=grayim.end<uchar>();grayit !=grayend;++grayit)
    *grayit = rand()%255;
    
    MatIterator_<Vec3b> colorit,colorend;
    for( colorit =colorim.begin<Vec3b>(),colorend =colorim.end<Vec3b>();color !=colorend; ++colorit)
    {
    (*colorit)[0] = rand()%255; //Blue
    (*colorit)[1] =rand()%255;//Green
    (*colorit)[2] =rand()%255;//Red
    

    3指针

    for ( int i =0;o<grayim.rows; ++i)
    {
    	uchar*p =grayim.ptr<uchar>(i);
    	for(int j=0 ;j<grayim.cols;++j)
    	p[j] =(i+j)%255;
    }
    
    展开全文
  • opencv 读取图像像素值到数组,用指针方式实现 opencv 读取图像像素值到数组,用指针方式实现
  • opencv读取图像像素值

    千次阅读 2017-11-28 23:00:38
    用鼠标取图片中的像素值#include<opencv2\opencv.hpp> #include using namespace cv; using namespace std; bool flag = false; int xvalue = 0; int yvalue = 0; Mat image,image1,image2; void mousecallback(int ...

    用鼠标取图片中的像素值

    #include<opencv2\opencv.hpp>
    #include<iostream>
    using namespace cv;
    using namespace std;
    bool flag = false;
    int xvalue = 0;
    int yvalue = 0;
    Mat image,image1,image2;
    void mousecallback(int event, int x, int y, int flags, void* userdata);
    int main(int argc, char* argv[])
    {
     namedWindow("imageshow", 0);
     Mat image = imread("F:\\6.jpg", 1);
     if(!image.data)
     {
      cout<<"the image is error"<<endl;
      return 0;
     }
     imshow("imageshow", image);
     image.copyTo(image1);
     cv::setMouseCallback("imageshow", mousecallback, 0);
     waitKey(0);
     return 0;
    }
    void mousecallback(int event, int x, int y, int flags, void* userdata)
    {
     image1.copyTo(image2);
     switch (event)
     {
     case EVENT_LBUTTONDOWN:
      {
       flag = true;
      }
      break;
     case EVENT_LBUTTONUP:
      {
       if(flag)
       {
        xvalue = x;
        yvalue = y;
        flag = 0;
        int b = image1.at<Vec3b>(yvalue, xvalue)[0];
        int g = image1.at<Vec3b>(yvalue, xvalue)[1];
        int r = image1.at<Vec3b>(yvalue, xvalue)[2];
        cout<<"B:"<<b<<' '<<"G:"<<g<<' '<<"R:"<<r<<endl;
       }
      }
      break;
     }
    }
    展开全文
  • Opencv读取图片像素值

    2018-10-24 18:51:00
    #include <iostream>...opencv2/opencv.hpp> using namespace std;using namespace cv; int main(){ Mat img1; img1 = imread("D://images//111.jpg"); if (img1.empty()) { cout <&...
  • 关于OpenCV Mat读取像素值

    千次阅读 2017-11-13 21:48:27
    最近开始使用OPenCV读取图像像素值,并做处理,裁剪出ROI区域,并做保存。 对于Mat类生成的对象,包含诸多属性,Mat.rows, Mat.cols分别表示图像的heighten和width属性。 Mat的坐标系从左上角(0,0)开始,到右下角...
  • opencv图像像素值读取

    千次阅读 2016-08-26 09:28:46
    说到图像像素,肯定要先认识一下图像中的坐标系长什么样。 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线;Y轴为图像矩形左边的那条垂直线。该坐标体系在诸如结构体Mat,Rect,Point中都是...
  • c++ opencv读取图片像素值并进行加密

    千次阅读 2016-07-18 00:40:05
    使用opencv 获取图片像素值 并分别对RGB值进行八位01串的加解密 环境:visual studio、opencv(需要安装) #include #include #include using namespace std; //#define key 0xa9 int key[8]={0,1,0,0,0,0,1,0}...
  • opencv2/opencv.hpp>#include<vector>#include <fstream> using namespace std;using namespace cv; int main(int argc, char* argv[]){ const char* imagename = "2.jpg";  //从文件...
  • opencv修改像素值

    千次阅读 2019-11-13 20:00:13
    Mat对象读取图片,用矩阵(二维数组)储存图片的像素值 #include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; int main() { Mat src = imread("D:/image/1....
  • #include <opencv/cv.h> #include <opencv/highgui.h> using namespace std; int main() { IplImage* img = 0; int height,width,step,channels; int i,j,k; img = cvLoadImage(“k:\lena.jpg”,-1); ...
  •  outfile1图像像素值";  height = img->height;  width = img->width;  for(int i=0;i<img->width;i++)  {  for(int j=0;j<img->height;j++)  {  s = cvGet2D(img,i,j);//(j,i)  outfile1[0];...
  • 读取保存的图片,发现某个位置的像素值本来是0或者255的,但是变成了3或者250等值,产生了细微的偏差。看代码也没找出什么问题。后面定位问题应该出在保存图片格式上。 一、OpenCV目前支持的图像格式 OpenCV目前...
  • Java结合OpenCV读取图片并遍历像素值

    千次阅读 2019-08-01 20:51:54
    1 项目结构 图1 图像读取及遍历项目...package com.opencv; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; import java.util.Vector;...
  • OpenCV读取图像像素值

    千次阅读 2016-10-09 11:00:02
    OpenCV中用于读取图像像素点的的方法很多,这里主要提供了两种常用的方法。 方法一 利用IplImage数据类型的imageData定位数据缓冲区来实现,imageData包含指向图像第一个像素数据的指针 例: If( imgSource != 0 )...
  • 很多时候,我们需要读取某个像素值,或者设置某个像素值;在更多的时候,我们需要对整个图像里的所有像素进行遍历。 OpenCV 提供了多种方法来实现图像的遍历。 1 at()函数 函数 at()来实现读去矩阵中的某个像素,...
  • 首先是在某论坛上一位老师写的一个程序,这个不是用OpenCV写的,也很棒,放在这里,免得日后忘记。 这是用了微软提供的GDI写的,其实跟OpenCV也很像。如果没有安装OpenCV的话,是很好的选择。 #include #include...
  • python + opencv实现提取.png和.jpg图像的像素信息并存储到txt文件中代码 ** import cv2 import numpy import matplotlib.pyplot as plt img = cv2.imread(“D:/Desktop/show_example1/train/0/1.jpg” , cv2.IMREAD...
  • OpenCV经常用到读取图像像素点的操作,还没有自己测试过速度,正好有空试一试。应该还有别的读取方式,以下就只测试了自己用到的7种。有的方法原理是相同。 直接上代码看结果 #include<opencv2/opencv.hpp> #...
  • opencv像素值读取不到

    2015-05-01 06:53:47
    为什么这段代码用指针data无法修改到图像右侧的像素点?![图片说明](https://img-ask.csdn.net/upload/201505/01/1430463179_568798.jpg) #include #include #include #include #define N 32 using namespace ...
  •         我正在尝试将 matlab 脚本转换为 python。... 但是奇怪的事发生了,matlab 和 python的 rgb 像素值不一样,我也知道 matlab是RGB 方式存储,python 的 opencv 是 BGR 存储,但是匹

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 442
精华内容 176
关键字:

opencv读取像素值