如何在Python中正确使用opencv.imread的参数`flags'?

时间:2019-06-09 09:19:34

标签: python opencv

这段代码用于在jupyter单元内绘制图像。

  add_filter( 'wp_nav_menu_items', 'add_loginout_link', 10, 2 );
    function add_loginout_link( $items, $args ) {
     if (is_user_logged_in() && ($language['en'] == ICL_LANGUAGE_CODE) && $args->theme_location == 'main_navigation')
{
$items .= '

<a href="' . wp_logout_url( home_url() ) . '" title="' . __( '<b>Logout</b>' ) .'">' . __( '<b>Logout</b>' ) . '</a>';
}
if (is_user_logged_in() && ($language['es'] == ICL_LANGUAGE_CODE) && $args->theme_location == 'main_navigation')
{
$items .= '
<a href="' . wp_logout_url( home_url() ) . '" title="' . __( '<b>test</b>' ) .'">' . __( '<b>test</b>' ) . '</a>';
}
elseif (!is_user_logged_in() && $args->theme_location == 'main_navigation') {
$items .= '
<a href="https://www.example.com/login"><b>Login </b></a>
';
}
return $items;

from matplotlib import pyplot as plt import cv2 img = cv2.imread('img1.png',1) a = plt.imshow(img) plt.show() 之外的其他部分都很容易理解。

opencv.imread的doc

opencv.imread

我尝试过-1、0和1,效果很好。

其他选项(例如CV_LOAD_IMAGE_ANYDEPTH)有什么作用?如何在Python中使用这些选项?

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).

直接设置出错

from matplotlib import pyplot as plt
import cv2
img = cv2.imread('img1.png',CV_LOAD_IMAGE_ANYDEPTH)
a = plt.imshow(img)
plt.show()

使用-------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-14-8c9e4e747e3f> in <module>() 1 from matplotlib import pyplot as plt 2 import cv2 ----> 3 img = cv2.imread('img1.png',CV_LOAD_IMAGE_ANYDEPTH) 4 a = plt.imshow(img) 5 plt.show() NameError: name 'CV_LOAD_IMAGE_ANYDEPTH' is not defined 时遇到另一个错误

cv2.CV_LOAD_IMAGE_ANYDEPTH

任何人都可以提供可运行的python代码来演示如何使用-------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-29-f6ea92814b06> in <module>() 1 from matplotlib import pyplot as plt 2 import cv2 ----> 3 img = cv2.imread('img1.png',cv2.CV_LOAD_IMAGE_ANYDEPTH) 4 a = plt.imshow(img) 5 plt.show() AttributeError: module 'cv2.cv2' has no attribute 'CV_LOAD_IMAGE_ANYDEPTH' 吗?

2 个答案:

答案 0 :(得分:0)

imread标志指示应如何读取图像。它们是整数标志,具有2的幂(-1除外)。

标志在文档here中进行了描述,here您可以找到它们的值。从技术上讲,您可以简单地使用该值,但这是一种不良的编码样式。

这些标志有些混乱,因为随着OpenCV 3的发布,已经对某些标志的命名和作用域进行了一些向后兼容的更改。对于OpenCV 3及更高版本,请使用链接文档中的名称。

答案 1 :(得分:0)

我注意到与官方的openCV文档cv2相比,它们已经在python版本中重命名了一些参数。例如,在python中,CV_LOAD_IMAGE_ANYDEPTH变为cv2.IMREAD_ANYDEPTH,因此您的代码应如下所示:

img = cv2.imread('img1.png',cv2.IMREAD_ANYDEPTH)

您可以在此新面额cv2.IMREAD _ ***下找到cv2.imread的所有标志