gpt4 book ai didi

opencv - 基于条件的IO操作的常量变量初始化

转载 作者:行者123 更新时间:2023-12-02 16:54:36 26 4
gpt4 key购买 nike

我一直在用kotlin编写一些opencv应用程序,并根据以下代码偶然发现了我好奇的问题:

val image = 
if (!Imgcodecs.imread(filename).empty())
Imgcodecs.imread(filename)
else
Mat.eye(512, 512, CvType.CV_8U).mul(Mat(512, 512, CvType.CV_8U, Scalar(255.0)))

编译器(通常)是否优化此类IO操作(如这些连续调用(读取))?

有什么成熟的和/或优雅的方法可以解决此类问题?

最佳答案

我认为编译器没有办法知道任意方法是无副作用的。实际上,这不是(我认为)-这里有发生比赛的可能性。

避免这种情况的一种方法是使用类似以下的方法:

val image = with(Imgcodecs.imread(filename)) {
if (!empty()) {
this
} else {
Mat.eye(...)
}
}

或者更明确一些,从而避免 with idiom的魔力:
val image = {
val mtx = Imgcodecs.imread(filename)
if (!mtx.empty()) {
mtx
} else {
Mat.eye(...)
}
}

关于opencv - 基于条件的IO操作的常量变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49638580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com