imread函数参数_opencv中imread函数参数 - CSDN
精华内容
参与话题
  • opencv中imread第二个参数的含义

    万次阅读 多人点赞 2016-11-01 10:48:18
    文档中是这么写的: Flags specifying the color type of a loaded image: CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to ...

    文档中是这么写的:

    Flags specifying the color type of a loaded image:

    • CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
    • CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
    • CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
    • >0 Return a 3-channel color image.

      Note

      In the current implementation the alpha channel, if any, is stripped from the output image. Use negative value if you need the alpha channel.

    • =0 Return a grayscale image.
    • <0 Return the loaded image as is (with alpha channel).

    大致翻译一下:

    Flags指定了所读取图片的颜色类型

    CV_LOAD_IMAGE_ANYDEPTH返回图像的深度不变。

    CV_LOAD_IMAGE_COLOR总是返回一个彩色图。

    CV_LOAD_IMAGE_GRAYSCALE总是返回一个灰度图。

    >0返回3通道彩色图

    注意:alpha 通道将被忽略,如果需要alpha 通道,请使用负值

    =0返回灰度图

    <0返回原图(带alpha 通道

    我觉得这里最大的问题就是一会说深度,一会说通道数,两个问题都没有说明白。


    实测,当读取一副黑白图时,如果使用Flags=2(CV_LOAD_IMAGE_ANYDEPTH),此时Flags>0,得到的仍是黑白图而不是彩色图。其它的值,如1,3,4等均是彩色。

    所以我觉得第一句话应该改为  CV_LOAD_IMAGE_ANYDEPTH返回图像原有的深度,但是通道数变为1,这是Flags>0中的特例


    在源码中可以看到

    自己测了一下,然后总结如下:

    flag=-1时,8位深度,原通道

    flag=0,8位深度,1通道

    flag=1,   8位深度  ,3通道

    flag=2,原深度,1通道

    flag=3,  原深度,3通道

    flag=4,8位深度 ,3通道

    展开全文
  • 本文由@星沉阁冰不语出品,转载请注明作者和出处。 文章链接:... ...引用@星沉阁冰不语 中有关如何使用imread()读取图像地址的六种方法。 然而这

    本文由@星沉阁冰不语出品,转载请注明作者和出处。

    文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51375078

    微博:http://weibo.com/xingchenbing 

     

     

    引用@星沉阁冰不语 中有关如何使用imread()读取图像地址的六种方法。


    然而这样得到的路径直接复制粘贴到vs里面会直接报错,如下:




    可以看出我们获取的绝对路径的表示方法是单右斜线形式的。显然opencv的imread()不支持这种方式。但是!!!经过实验发现imread()除了不支持单右斜线形式,其他斜线形式都支持!!!比如双右斜线形式、双左斜线形式、单左斜线形式、前述三种斜线混合型式都是支持的!!我想知道为什么??

    看图,下面的六种方式任何一种都是支持的,都可以成功读取并显示图片。




    我个人经常用的方法是第5种,相对路径法。只需要把图像文件放在工程文件夹下和.cpp文件放在一起就行了,读取的时候就可以直接用名字读取,如imread("miao.jpg");

    最后一种命令行参数法是源码中比较常见的。设置方法是:

    工程——属性——配置属性——调试——命令行参数,然后设置就行了。如图:



    设置之后miao.jpg就是argv[1],2.jpg就是argv[2]。

    这次的完整代码如下(路径因人而异的):

    [cpp] view plain copy
    1. #include<opencv2\opencv.hpp>  
    2.   
    3. using namespace cv;  
    4.   
    5. int main(int argc,char* argv[])  
    6. {  
    7.     Mat img;  
    8.   
    9.     //-- 1 --双右斜线法  
    10.     //string imgpath = "C:\\Users\\bingbuyu\\Pictures\\photo\\miao1.jpg";  
    11.     //-- 2 --双左斜线法  
    12.     //string imgpath = "C://Users//bingbuyu//Pictures//photo//miao1.jpg";  
    13.     //-- 3 --单左斜线法  
    14.     //string imgpath = "C:/Users/bingbuyu/Pictures/photo/miao1.jpg";  
    15.     //-- 4 --以上三种混合法  
    16.     //string imgpath = "C:/Users//bingbuyu\\Pictures//photo//miao1.jpg";  
    17.     //-- 5 --相对路径法  
    18.     //string imgpath = "miao.jpg";  
    19.     //-- 6 --命令行参数法  
    20.     string imgpath = argv[1];  
    21.   
    22.     img = imread(imgpath, 1);  
    23.     imshow("img", img);  
    24.   
    25.     waitKey(0);  
    26.     return 0;  
    27. }  

    以上六种的运行结果,还是这只喵:




          imread()函数中的第二个参数为flag



    flags = -1:imread按解码得到的方式读入图像

    flags = 0:imread按单通道的方式读入图像,即灰白图像

    flags = 1:imread按三通道方式读入图像,即彩色图像



    展开全文
  • openCV基础函数imread第二个参数

    千次阅读 2017-06-12 00:28:15
    imread是学OpenCV 的第一个函数了,一直都用默认的方式也就是cv::imread("图像名"); 但是在执行一个简单的图像锐化算法的时候输出图像总是输入图像的1/3,请教师兄后才知道是图像读入的问题。 ...

    imread是学OpenCV 的第一个函数了,一直都用默认的方式也就是cv::imread("图像名");

    但是在执行一个简单的图像锐化算法的时候输出图像总是输入图像的1/3,请教师兄后才知道是图像读入的问题。

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
    #include <iostream>
    #include <time.h>
    #include <opencv2/opencv.hpp>

    using namespace std;
    using namespace cv;


    void sharpen(const Mat &image, Mat & result)
    {
    result.create(image.size(),image.type());
    for (int j = 1;j < image.rows - 1; j++)
    {
    const uchar* previous = image.ptr<const uchar>(j - 1);
    const uchar* current = image.ptr<const uchar>(j);
    const uchar* next = image.ptr<const uchar>(j + 1);
    uchar* output = result.ptr<uchar>(j);
    for (int i = 1;i<image.cols - 1; i++)
    {
    *output++ = saturate_cast<uchar>(5*current[i] - current[i - 1] - current[i + 1] - previous[i] - next[i]);
    }
    }
    result.row(0).setTo(Scalar(0));
    result.row(result.rows - 1).setTo(Scalar(0));
    result.col(0).setTo(Scalar(0));
    result.col(result.cols - 1).setTo(Scalar(0));
    }
    int main()
    {
    clock_t start_time = clock();

    Mat image = imread("home.tif",CV_LOAD_IMAGE_UNCHANGED);
    if(!image.data)
    {
    cout << "Cannot Open!!" << endl;
    }
    imshow("Original",image);
    Mat result;
    sharpen(image,result);
    imshow("result",result);
    waitKey(0);

    clock_t end_time = clock();
    cout << "Running Time: " << static_cast<double>(end_time - start_time)/CLOCKS_PER_SEC << "s" << endl;
    system("PAUSE");
    return 0;
    }
    来自CODE的代码片
    OpenCVCookBook2-6.cpp
    在main()里的imread,先前没有加第二个参数CV_LOAD_IMAGE_UNCHANGED,但是函数默认以RGB三波段形式读入图像,可是我给的是一个单波段的tif图像,因此,图像的处理效果就只有源图像的1/3了。

    在reference里imread的各个参数如下:

    C++: Mat imread(const string& filename, int flags=1 )

     
    • filename – Name of file to be loaded.
    • flags –

      Flags specifying the color type of a loaded image:

      • CV_LOAD_IMAGE_ANYDEPTH - If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
      • CV_LOAD_IMAGE_COLOR - If set, always convert image to the color one
      • CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
      • >0 Return a 3-channel color image.

        Note

         

        In the current implementation the alpha channel, if any, is stripped from the output image. Use negative value if you need the alpha channel.

      • =0 Return a grayscale image.
      • <0 Return the loaded image as is (with alpha channel).
    由于接触时间短,还总结不出有什么精辟的结论,但是以后似乎用CV_LOAD_IMAGE_UNCHANGED就好了。

    展开全文
  • Python的imread()函数

    万次阅读 2018-08-10 21:33:37
    cv2方式:  # -*- coding: UTF-8 -*- import cv2 """ cv2模块--图片的读入和显示 ...D:/PycharmProjects/imageCut/...img=cv2.imread(image_path)# np.ndarray BGR uint8 cv2.imshow("test_im...

    cv2方式: 

    # -*- coding: UTF-8 -*-
    import cv2
    """
    cv2模块--图片的读入和显示
    """
    
    image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
    
    img=cv2.imread(image_path)# np.ndarray BGR uint8
    cv2.imshow("test_imread",img)# 转为RGB显示
    cv2.waitKey()

    PIL方式:

    # -*-coding: UTF-8 -*-
    
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    
    image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
    
    #PIL
    #相关:scipy.misc.imread, scipy.ndimage.imread
    #misc.imread 提供可选参数mode,但本质上是调用PIL,具体的模式可以去看srccode或者document
    #https://github.com/scipy/scipy/blob/v0.17.1/scipy/misc/pilutil.py
    img=Image.open(image_path)
    img=np.array(img)# 获得numpy对象, np.ndarray, RGB
    
    #统一使用plt进行显示,不管是plt还是cv2.imshow,在python中只认numpy.array,但是由于cv2.imread 的图片是BGR,cv2.imshow 时相应的换通道显示
    
    plt.imshow(img)
    plt.show()

     matplotlib.image:

    # -*-coding: UTF-8 -*-
    
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg
    
    image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
    
    img=mpimg.imread(image_path)
    
    #统一使用plt进行显示,不管是plt还是cv2.imshow,在python中只认numpy.array,但是由于cv2.imread 的图片是BGR,cv2.imshow 时相应的换通道显示
    
    plt.imshow(img)
    plt.show()

     skimage.io方式:

    # -*-coding: UTF-8 -*-
    
    from PIL import Image
    import numpy as np
    import matplotlib.pyplot as plt
    from skimage import io
    
    image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
    
    #4 skimge
    #caffe.io.load_iamge()也是调用的skimage实现的,返回的是0-1 float型数据
    img = io.imread(image_path)
    
    #统一使用plt进行显示,不管是plt还是cv2.imshow,在python中只认numpy.array,但是由于cv2.imread 的图片是BGR,cv2.imshow 时相应的换通道显示
    
    plt.imshow(img)
    plt.show()

    scipy.misc方式:

    # -*-coding: UTF-8 -*-
    
    from scipy.misc import imread, imshow, imsave
    import matplotlib.pyplot as plt
    
    image_path="D:/PycharmProjects/imageCut/cutted_images/0.jpg"
    
    img = imread(image_path)
    # imshow(img) need to set the SCIPY_PIL_IMAGE_VIEWER environment variable to point to the program/executable that can be used to view images on your system
    
    plt.imshow(img)
    plt.show()
    imsave("D:/PycharmProjects/imageCut/cutted_images/1.jpg",img)

     

    展开全文
  • 在OpenCV官方文档中imread()函数的原型如下: Mat imread(const string& filename, int flags = 1); 第一个参数filename是我们需要载入图片的路径名。至于第二个参数,表示的是加载的图像是什么类型,可以看到...
  • 关于imread参数

    2019-02-28 17:12:26
    经过实验如下,对于CMYK图片(相信RGB图片一样) -1, 4通道,分别是YMC,第四通道是aphla,不是K 0,8位单通道 1,8位3通道 2,任意深度(可能对于16比特或者是浮点) 4,任意色彩(可能通道比较多) ...
  • 为什么使用imread函数时候,第二个参数的设置会最终影响是否能读入图片?比如jpg的用1的时候可以,用0的时候就说内存泄漏?但是用0不应该是强制转换成灰度图像?这真的必须按规定值使用吗?
  • opencv中imread函数,imshow( )函数用法总结(01)

    万次阅读 多人点赞 2018-08-12 11:30:07
    还是老习惯,分三步走。...该函数经常配合imshow( )函数一起使用,imshow( )函数功能就是把你刚才载入的图片显示出来。 第二步,结果图显示:如果你已经配置好环境那就来上手来试验一下吧。先显示两张图片,分别...
  • opencv cv2.imread()

    万次阅读 多人点赞 2019-07-12 10:20:30
    imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种: cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。 cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0...
  • OpenCV:图片读取函数imread的文件路径写法cv::Mat cv::imread( const &string filename, int flags=1) //文件在当前目录下 Mat img=imread("test.jpg"); //不在当前目录 //使用双反斜杠 img=imread("folder\\...
  • opencv imread()方法第二个参数介绍

    千次阅读 2018-11-28 18:02:24
    使用imread()方法读取图像这个操作是我们做opencv图像处理时经常用到的方法,此方法的原型是: imread(const string&amp; filename, int flag=1) filename指图像名称,flag指读取图像颜色类型。 这张图中...
  • imread()函数

    千次阅读 2018-09-19 19:29:51
    原型: Mat imread(const string&amp;amp;amp;filename,int flags=1); const string&amp;amp;amp;filename 指图片路径名 int flags=1 为载入标识,指定一个加载图像的颜色类型(默认1表示载入三通道的彩色...
  • imread 函数:读取参数图片,得到矩阵/数组 figure 函数:创建一个用来显示图形输出的一个窗口对象,figure(1)是指这个窗口的名字,左上角显示。也可以是figure(2)figure(3)等 imshow 函数:显示图像 title:显示...
  • imread参数

    千次阅读 2012-11-03 22:42:03
    Mat是OpenCV里的一个数据结构,在这里我们定义一个Mat类型的变量img,用于保存读入的图像,在本文开始有写到,我们用imread函数来读取图像,第一个字段标识图像的文件名(包括扩展名),第二个字段用于指定读入图像...
  • 经常看到有人在网上询问关于imread()函数读取图片失败的问题。今天心血来潮,经过实验,总结出imread()调用的四种正确姿势。 通常我要获取一张图片的绝对路径是这样做的:在图片上右键——属性——安全——对象名称...
  • 1.读取图片 ...img = cv2.imread('image.jpg') print(img) 2. 查看输出 [[[ 33 26 103] [ 34 21 100] [ 34 15 98] ... [ 74 98 118] [ 64 89 106] [ 57 85 101]] [[ 33 27 102] [ 33 23 1...
  • OpenCV 用imread函数读入灰度图(单通道)变成彩色图(三通道)
  • Python cv2.imread()基本参数介绍

    千次阅读 2020-03-02 12:30:00
    除了最常用的路径参数之外,第二个参数也至关重要: imread(const string& filename, int flag=1) filename:需要打开图片的路径,可以是绝对路径或者相对路径,路径中不能出现中文。 flag:图像的通道和色彩...
  • Python 中各种imread函数的区别与联系

    万次阅读 多人点赞 2017-12-09 20:13:43
    Python 中各种imread函数的区别与联系最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这...
  • cv2的几个常用函数及例子

    千次阅读 2016-09-01 16:28:51
    cv2.imread():读入图片,共两个参数,第一个参数为要读入的图片文件名,第二个参数为如何读取图片,包括cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:以灰度模式读入图片;cv2.IMREAD_UNCHANGED:...
1 2 3 4 5 ... 20
收藏数 27,434
精华内容 10,973
关键字:

imread函数参数