gpt4 book ai didi

python - C++ 等价于 Python 的带有比较的数组访问 (array[condition] = value)

转载 作者:行者123 更新时间:2023-12-02 17:25:01 33 4
gpt4 key购买 nike

我正在关注这个 OpenCV Watershed 教程,但将其移植到 C++:https://docs.opencv.org/master/d3/db4/tutorial_py_watershed.html

简而言之,在本教程的某些地方,作者将使用类似于以下的操作访问和分配矩阵中的像素:

markers[unknown==255] = 0

或这个

img[markers == -1] = [255,0,0]

我想做的是相当于所说的操作,但是在 C++ 中。感觉很简单,但我就是想不通如何优雅地做到这一点。

对于第一种情况,我可以使用 cv::findNonZero 来解决它。 ,但是对于第二个它变得稍微复杂一些,我想避免使用hacky解决方案。

老实说,这可能已经得到了回答,但我不知道哪些术语会在搜索中提出这个问题,任何指针或帮助将不胜感激。

最佳答案

您可以使用 OpenCV 的 inRange 使用 lower = Upper 边界的方法来获得一个表示要更改的所需像素的掩码,然后在 OpenCV 的 setTo 中使用此掩码方法:

// Read image
cv::Mat img = cv::imread("image.png");

// Mask everything, that's pure blue (#0000FF)
cv::Mat mask;
cv::inRange(img, cv::Scalar(255, 0, 0), cv::Scalar(255, 0, 0), mask);

// Write mask
cv::imwrite("mask.png", mask);

// Update value in mask to red
img.setTo(cv::Scalar(0, 0, 255), mask);
cv::imwrite("image_new.png", img);

return 0;

这是一些输入图像:

Input

这是获得的面具:

Mask

这是更新的图像:

New image

希望有帮助!

关于python - C++ 等价于 Python 的带有比较的数组访问 (array[condition] = value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59825112/

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