精华内容
下载资源
问答
  • opencv基础(二)查看图像属性,查看图像像素值 1.查看图像像素值 2. 灰度图像像素值的获取方法 2.1 根据at索引获取像素值 2.2 根据行指针获取像素值 2.3 根据基地址获取 3 彩色图像像素值的获取方法 3.1...

    opencv基础(二)查看图像属性,查看图像像素值

    1.查看图像像素值

     

    2. 灰度图像像素值的获取方法

    2.1 根据at索引获取像素值

    2.2 根据行指针获取像素值

    2.3 根据基地址获取

    3 彩色图像像素值的获取方法

    3.1采用at获取彩色像素

    3.2采用行指针ptr获取像素

    3.3 采用基地址获取像素

    1.图像操作

    1.1查看图像信息

     

     

    2 灰度图像获取像素值

     

    输出结果:

     

     

     

     

    ​​​​​​​3. 彩色图像获取像素值

    输出结果:

     

    4. 程序源码

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


    //using namespace cv;

    int main(int argc, char** argv) {

        
        cv::String imgPath = "F:/软件开发/qt开发/08opencv/opencv素材/Image/";
        cv::String fileName = "Luffy.png";
        //cv::String fileName = "opencvlog.jpg";
        //cv::String fileName = "mybaby.png";

        cv::String pathFile = imgPath + fileName;
        cv::Mat  src, srcGray;

        src = cv::imread(pathFile);  // 采用默认方式读取图像
        if (src.data == NULL) {
            printf("图像赌徒失败\n");
            return -1;
        }
        cv::imshow("1. 默认读图", src); 

        srcGray = cv::imread(pathFile, cv::IMREAD_GRAYSCALE);  
        cv::imshow("2. 转换成灰度读图", srcGray); 

        // 1. 查看图像信息
        std::cout << "灰度图像通道数: " << srcGray.channels() <<
            " 深度: " << srcGray.depth() << " 类型:" <<srcGray.type() << "elemSize1: " <<srcGray.elemSize1()
            << "elemSize: " << srcGray.elemSize() <<" step1:" <<srcGray.step1() << " total():" << srcGray.total() << 
            " size: " << srcGray.size  << " flags: " << srcGray.flags << " dims: " << srcGray.dims  << " rows,clos " <<
            srcGray.rows << "," << srcGray.cols << std::endl;
        
        std::cout << std::endl;
        //2. 查看彩色图像信息
        std::cout << "彩色图像通道数: " << src.channels() <<
            " 深度: " << src.depth() << " 类型:" << src.type() << "elemSize1: " << src.elemSize1()
            << "elemSize: " << src.elemSize() << " step1:" << src.step1() << " total():" << src.total() <<
            " size: " << src.size << " flags: " << src.flags << " dims: " << src.dims << " rows,clos " <<
            src.rows << "," << src.cols << std::endl;

        // 3.灰度图像获取指定像素值的方法
        // 3.1 根据at索引获取像素值
        int row = 100;
        int col = 100;
        std::cout << " 采用at获取灰度图像的单个像素:" << std::endl;
        for (int j = 0; j < srcGray.cols; j++) {
            std::cout  << (int)srcGray.at<uchar>(row,j) << " ";
        }
        std::cout << std::endl;
        
        // 3.2 根据行指针获取像素值
        uchar* ptr= srcGray.ptr<uchar>(row);
        std::cout << " 采用ptr获取灰度图像的单个像素:" << std::endl;
        for (int j = 0; j < srcGray.cols; j++) {
            std::cout << (int)*(ptr + j) << " ";
        }
        std::cout << std::endl;
        
        // 3.3 根据起始地址获取
        uchar* pts = srcGray.data;
        std::cout << " 采用data获取灰度图像的单个像素:" << std::endl;
        int rows = srcGray.rows;
        int cols = srcGray.cols;
        for (int j = 0; j < srcGray.cols; j++) {
            std::cout << (int)*(pts + rows*row + j) << " ";
        }
        std::cout << std::endl;

        // 4 彩色图像获取方法
        // 4.1 采用at获取彩色像素
        std::cout << " 采用at获取彩色图像的单个像素:" << std::endl;
        cv::Vec3b bgr;
        uchar bPix;
        uchar gPix;
        uchar rPix;
        for (int j = 0; j < srcGray.cols/2; j++) {
            bgr = (cv::Vec3b)src.at<cv::Vec3b>(row, j); // 根据位置获取每个像素值,
            bPix = bgr[0];// 根据像素获取蓝色值
            gPix = bgr[1];// 获取色通道像素
            rPix = bgr[2]; // 获取红色通道像素
            printf("[%d,%d,%d] ", int(bPix),int(gPix),int(rPix));
            //std::cout << (cv::Vec3b)src.at<cv::Vec3b>(row, j) << " ";
        }
        std::cout << std::endl;
        
        //4.2采用行指针ptr获取像素

        std::cout << " 采用ptr获取灰度图像的单个像素:" << std::endl;
        ptr = src.ptr<uchar>(row);
        for (int j = 0; j < src.rows/2; j++) {
            
            printf("[%d,%d,%d] ",  (int)*(ptr + j*3), (int)*(ptr + j * 3 + 1), (int)*(ptr + j * 3 + 2));
        }
        std::cout << std::endl;
        //4.3 采用基地址获取像素
        uchar* baseAddr = src.data;
        std::cout << " 采用基地址获取灰度图像的单个像素:" << std::endl;
        for (int j = 0; j < src.rows / 2; j++) {

            printf("[%d,%d,%d] ", (int)*(baseAddr + rows*row + j * 3), (int)*(baseAddr + rows*row + j * 3 + 1), 
                (int)*(baseAddr + rows*row + j * 3 + 2));
        }
        std::cout << std::endl;

        cv::waitKey(0);
        system("pause");
        return 0;
    }

     

     

     

    展开全文
  • Dicom 图像像素值(灰度值)转为CT值

    千次阅读 2019-03-06 09:13:00
    在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这个范围,通常是0-4096,这是我们常见到的像素值或者灰度值,这就需要我们在图像像素值(灰度值)转换为CT值。 首先,需要读取两个DICOM Tag信息,...

    CT值的单位是Hounsfield,简称为Hu,范围是-1024-3071。用于衡量人体组织对X射线的吸收率,设定水的吸收率为0Hu。

    在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这个范围,通常是0-4096,这是我们常见到的像素值或者灰度值,这就需要我们在图像像素值(灰度值)转换为CT值。

    首先,需要读取两个DICOM Tag信息,(0028|1052):rescale intercept和(0028|1053):rescale slope.
    然后通过公式:
    Hu = pixel * slope + intercept
    计算得到CT值。

    但是,这里会有一个问题,有的图像就已经是CT值(HU值),则表明该图像的Solpe=1,Intercept=0,如果按照上面的公式计算,就还是图像的值;
    而有的图像则是像素值,所以需要转化,该图像的Sople=1, Intercept=-1024

    展开全文
  • VTK图像处理之访问图像像素值

    千次阅读 2017-07-16 21:37:32
    图像像素值的访问与修改是最常用的一种操作。VTK提供了两种访问图像像素值的访问。 一、直接访问  第一种方法是直接发访问vtkImageData的数据数组。vtkImageData提供了GetScalarPointer()函数获取数据数组指针...
    图像像素值的访问与修改是最常用的一种操作。VTK提供了两种访问图像像素值的访问。
    

    一、直接访问

      第一种方法是直接发访问vtkImageData的数据数组。vtkImageData提供了GetScalarPointer()函数获取数据数组指针,该函数有三种形式:

    virtual void* GetScalarPointer(int coordinates[3]);
    virtual void* GetScalarPointer(int x, int y, int z);
    virtual void* GetScalarPointer();

    前两种形式根据给定的像素索引得到指定的像素值,注意返回的是第(x,y,z)个像素值的地址。而第三种形式是返回图像数据数组的头指针,然后根据头指针可以依次访问索引像素。

    示例演示

    使用GetScalarPointer遍历图像像素。

    CMakeLists.txt代码

    CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
    PROJECT(VisitImagePixelDirectlyExample)
    FIND_PACKAGE(VTK REQUIRED)
    INCLUDE(${VTK_USE_FILE})
    ADD_EXECUTABLE(VisitImagePixelDirectlyExample   VisitImagePixelDirectlyExample.cpp)
    TARGET_LINK_LIBRARIES(VisitImagePixelDirectlyExample ${VTK_LIBRARIES})

    VisitImagePixelDirectlyExample.cpp文件代码如下:

    /**********************************************************************
    
    文件名: VisitImagePixelDirectlyExample.cpp
    Copyright (c) 阿Bin先生. All rights reserved.
    更多信息请访问: http://blog.csdn.net/webzhuce
    
    **********************************************************************/
    
    #include <vtkSmartPointer.h>
    #include <vtkImageViewer2.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkRenderer.h>
    #include <vtkBMPReader.h>
    #include <vtkImageData.h>
    
    int main(int argc, char* argv[])
    {
        vtkSmartPointer<vtkBMPReader> reader =
            vtkSmartPointer<vtkBMPReader>::New();
        //测试图像:E:\TestData\masonry.bmp
        reader->SetFileName("E:\\TestData\\masonry.bmp");
        reader->Update();
    
        int dims[3];
        reader->GetOutput()->GetDimensions(dims);
    
        int nbOfComp;
        nbOfComp = reader->GetOutput()->GetNumberOfScalarComponents();
    
        for(int k=0; k<dims[2]; k++)
        {
            for(int j=0; j<dims[1]; j++)
            {
                for(int i=0; i<dims[0]; i++)
                {
                    if(i<100 && j<100)
                    {
                        unsigned char * pixel = 
                            (unsigned char *) ( reader->GetOutput()->GetScalarPointer(i, j, k) );
                        *pixel = 0;
                        *(pixel+1) = 0;
                        *(pixel+2) = 0;
                    }
                }
            }
        }
    
        vtkSmartPointer<vtkImageViewer2> imageViewer =
            vtkSmartPointer<vtkImageViewer2>::New();
        imageViewer->SetInputConnection(reader->GetOutputPort());
    
        vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
            vtkSmartPointer<vtkRenderWindowInteractor>::New();
        imageViewer->SetupInteractor(renderWindowInteractor);
        imageViewer->Render();
        imageViewer->GetRenderer()->ResetCamera();
        imageViewer->Render();
    
        imageViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
        imageViewer->SetSize(640, 480);
        imageViewer->GetRenderWindow()->SetWindowName("VisitImagePixelDirectlyExample");
    
    
        renderWindowInteractor->Start();
    
        return EXIT_SUCCESS;
    }

    运行结果:

    这里写图片描述

      示例实现了将图像的100*100大小的区域设置为黑色。通过GetScalarPointer(i,j,k)函数获取访问图像像素值。需要注意的是,GetScalarPointer()函数返回的是void*类型,因此需要根据图像的实际类型进行强制转换。示例中将像素数组的头指针类型转换为unsigned char*。
      此外,需要注意的地方:VTK彩色以及矢量图像采用的是如下图所示的像素存储格式:
      
    这里写图片描述

      因此在修改RGB图像以及矢量图像像素时,需要根据像素的元组的组分数目来访问。示例中先获得第(i,j,k)个像素的地址也就是R值的地址,然后将地址加1来访问后续G值和B值。如果对像素的元组组分不确定,可以通过函数GetNumberOfScalarComponent()获取,代码如下:

    int nbOfComp = reader->GetOutput->GetNumberOfScalarComponent()

    二、迭代器访问

      第二种方法是用vtkImageIterator类实现迭代器方法访问图像像素。该类是一个模板类,使用时,需要提供迭代的图像像素类型以及迭代的区域大小。

    示例演示

    CMakeLists.txt代码

    CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
    PROJECT(VisitImagePixelIterativelyExample)
    FIND_PACKAGE(VTK REQUIRED)
    INCLUDE(${VTK_USE_FILE})
    ADD_EXECUTABLE(VisitImagePixelIterativelyExampleVisitImagePixelIterativelyExample.cpp)
    TARGET_LINK_LIBRARIES(VisitImagePixelIterativelyExample ${VTK_LIBRARIES})

    VisitImagePixelIterativelyExample.cpp文件代码如下:

    /**********************************************************************
    
    文件名: VisitImagePixelIterativelyExample.cpp
    Copyright (c) 阿Bin先生. All rights reserved.
    更多信息请访问: http://blog.csdn.net/webzhuce
    
    **********************************************************************/
    
    #include <vtkSmartPointer.h>
    #include <vtkImageViewer2.h>
    #include <vtkRenderWindow.h>
    #include <vtkRenderWindowInteractor.h>
    #include <vtkRenderer.h>
    #include <vtkBMPReader.h>
    #include <vtkImageData.h>
    #include <vtkImageIterator.h>
    
    
    int main(int argc, char* argv[])
    {
        vtkSmartPointer<vtkBMPReader> reader =
            vtkSmartPointer<vtkBMPReader>::New();
        //测试图像:E:\\TestData\\masonry.bmp
        reader->SetFileName ( "E:\\TestData\\masonry.bmp" );
        reader->Update();
    
        int subRegion[6] = {0,100, 0, 100, 0, 0};
        vtkImageIterator<unsigned char> it(reader->GetOutput(), subRegion);
    
        while(!it.IsAtEnd())
        {
            unsigned char *inSI = it.BeginSpan();
            unsigned char *inSIEnd = it.EndSpan();
    
            while(inSI != inSIEnd)
            {
                *inSI = 255-*inSI;
                ++inSI;
            }
            it.NextSpan();
        }
    
        vtkSmartPointer<vtkImageViewer2> imageViewer =
            vtkSmartPointer<vtkImageViewer2>::New();
        imageViewer->SetInputConnection(reader->GetOutputPort());
    
        vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
            vtkSmartPointer<vtkRenderWindowInteractor>::New();
        imageViewer->SetupInteractor(renderWindowInteractor);
        imageViewer->Render();
        imageViewer->GetRenderer()->ResetCamera();
        imageViewer->Render();
    
        imageViewer->GetRenderer()->SetBackground(1.0, 1.0, 1.0);
        imageViewer->SetSize(640, 480);
        imageViewer->GetRenderWindow()->SetWindowName("VisitImagePixelIterativelyExample");
    
        renderWindowInteractor->Start();
    
        return EXIT_SUCCESS;
    }

    运行结果:

    这里写图片描述

       示例读取了一幅BMP图像,然后定义一个子区域。注意:在定义子区域时,不要超过图像的大小范围。然后根据图像类型unsigned char定义一个图像迭代器it,定义it时有两个参数:一个是要访问的图像,另一个是访问的图像区域。设置完毕,迭代器开始工作第一个while循环是判断迭代器是否结束。进入循环后,对于每一个迭代器it,又存在第二个循环,判断的是当前像素的元组(Tuple)是否迭代完毕。由于VTK中所有类型的图像格式都是vtkImageData,因此每个像素可能是标量,也可能是矢量。因此,每当访问到一个像素时需要迭代当前像素的元组。元组迭代时,inSI = it.BeginSpan()获取第一个组分,inEnd = it.EndSpan()表示组分迭代完毕。

    展开全文
  • Opencv-图像像素值统计

    千次阅读 2019-09-08 08:36:19
    图像像素值统计知识点python代码c++代码 知识点 像素值统计 最小(min) 最大(max) 均值(mean) 标准方差(standard deviation) API知识点 最大最小值minMaxLoc 计算均值与标准方差meanStdDev python代码 import cv2 ...

    图像像素值统计

    知识点

    像素值统计

    • 最小(min)
    • 最大(max)
    • 均值(mean)
    • 标准方差(standard deviation)
      API知识点
    • 最大最小值minMaxLoc
    • 计算均值与标准方差meanStdDev

    python代码

    import cv2 as cv
    import numpy as np
    
    src = cv.imread("C:/Users/qqxd/Desktop/opencvcode/images/test.png", cv.IMREAD_GRAYSCALE)
    cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
    cv.imshow("input", src)
    
    min, max, minLoc, maxLoc = cv.minMaxLoc(src)
    print("min: %.2f, max: %.2f"% (min, max))
    print("min loc: ", minLoc)
    print("max loc: ", maxLoc)
    
    means, stddev = cv.meanStdDev(src)
    print("mean: %.2f, stddev: %.2f"% (means, stddev))
    src[np.where(src < means)] = 0
    src[np.where(src > means)] = 255
    cv.imshow("binary", src)
    
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    c++代码

    #include <opencv2/opencv.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, const char *argv[])
    {
    	Mat src = imread("C:/Users/qqxd/Desktop/opencvcode/images/test.png", IMREAD_GRAYSCALE);
    	if (src.empty()) {
    		printf("could not load image...\n");
    		return -1;
    	}
    	namedWindow("input", WINDOW_AUTOSIZE);
    	imshow("input", src);
    
    	double minVal; double maxVal; Point minLoc; Point maxLoc;
    	minMaxLoc(src, &minVal, &maxVal, &minLoc, &maxLoc, Mat());
    	printf("min: %.2f, max: %.2f \n", minVal, maxVal);
    	printf("min loc: (%d, %d) \n", minLoc.x, minLoc.y);
    	printf("max loc: (%d, %d)\n", maxLoc.x, maxLoc.y);
    
    	// 彩色图像 三通道的 均值与方差
    	src = imread("C:/Users/qqxd/Desktop/opencvcode/images/test.png");
    	Mat means, stddev;
    	meanStdDev(src, means, stddev);
    	printf("blue channel->> mean: %.2f, stddev: %.2f\n", means.at<double>(0, 0), stddev.at<double>(0, 0));
    	printf("green channel->> mean: %.2f, stddev: %.2f\n", means.at<double>(1, 0), stddev.at<double>(1, 0));
    	printf("red channel->> mean: %.2f, stddev: %.2f\n", means.at<double>(2, 0), stddev.at<double>(2, 0));
    
    	
    	waitKey(0);
    	return 0;
    }
    

    运行结果如下:
    在这里插入图片描述

    展开全文
  •  在DICOM图像读取的过程中,我们会发现图像的像素值有可能不是这个范围,通常是0-4096,这是我们常见到的像素值或者灰度值,这就需要我们在图像像素值(灰度值)转换为CT值。  首先,需要读取两个DICOM Tag信息...
  • 【OpenCV 4】图像像素值统计

    千次阅读 2019-06-20 23:23:09
    用C++代码演示OpenCV 4.1.0 中图像像素值统计。 编程环境:OpenCV 4.1.0 + Visual Studio 2017
  • 图像像素值统计 图像像素最大值、最小值以及位置 图像均值、标准差 查找最大值、最小值 API public static MinMaxLocResult minMaxLoc(Mat src, Mat mask) 参数src:输入的图像矩阵 参数mask:可选的掩码矩阵...
  • //定义图像像素类型 HTuple hWidth(600); //定义图像宽度为400 HTuple hHeight(300); //定义图像高度为300 //方式1:利用构造函数, 创建一张1通道黑色图片 HImage hImage1(hType, hWidth, hHeight); hImage1.Write...
  • 功能:获取图像像素值。函数返回指定图像的红、绿、蓝颜色值 语法介绍: P=impixel(I) 返回灰度图像中用户指定的像素或像素集合的数据值,如果用户没有指定输入对象,impixel对于当前轴中的图像进行操作。用户...
  • 做医学图像处理会涉及DICOM图像,初学者应该要对图像像素有一定了解,在对像素处理中会一些算法会利用的更好。 图像灰度的概念是什么?灰度也可以认为是亮度,简单说就是色彩的深浅程度。 实际上在我们的日常...
  • C#中的bitmap类和图像像素值获取方法

    千次阅读 2017-11-08 11:08:29
    C#中的bitmap类和图像像素值获取方法 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和...
  • 访问图像像素值并修改【IplImage】
  • C++/opencv遍历图像像素值,创建并绘制新的图像 代码的主要功能: 主要是给原图,图上一层颜色,不同的类别对应不同的颜色 ori_img: label_img: 通过读取 label_img生成彩色图: 和原图融合: 1、有 ori.jpg原图...
  • opencv图像像素值读取

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

    千次阅读 2015-08-19 22:59:13
    访问图像像素值是图像处理的基本操作。OPENCV2提供了很多中访问方式,本文实现了其中比较常用的三种方式: (1) 通过指针访问 (2) 通过迭代器访问 (3) 动态地址计算,通过at()函数实现。
  • -bitmap类和图像像素值获取方法  转自 一.Bitmap类 Bitmap对象封装了GDI+中的一个位图,此位图由图形图像及其属性的像素数据组成.因此Bitmap是用于处理由像素数据定义的图像的对象.该类的主要方法和属性如下...
  • opencv读取图像像素值

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

    千次阅读 2016-10-09 11:00:02
    OpenCV中用于读取图像像素点的的方法很多,这里主要提供了两种常用的方法。 方法一 利用IplImage数据类型的imageData定位数据缓冲区来实现,imageData包含指向图像第一个像素数据的指针 例: If( imgSource != 0 )...
  • 图像像素值的反转

    千次阅读 2015-06-19 14:15:45
    图像反转:灰度图像范围为[0,L-1]的图像反转,表达式s=L-1-r;用这种方式倒转图像的强度,可产生图像反转的对等图像。 # include #include #include #include "cv.h" #include "highgui.h" #pragma comment(lib...
  • 创建存储三通道图像的矩阵: Mat img(Size(70,70),CV_8U3C,Scalar(0,0,0)灰度图(8UC1)的...intensity.val[0]中保存图像的灰度值(0-255),另外intensity.val[1],intensity.val[2]为0获取3通道图像像素值:Vec3b int

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,444
精华内容 7,377
关键字:

图像像素值