相当于 C++ 中的 Python [:]
the equivalent of python's [:] in c++
这是opencv中包含的python中"Trackbar as the Color Palette"程序的一部分。我想在c++中使用它。
我的问题是最后一行。
r = cv2.getTrackbarPos('R','image')
g = cv2.getTrackbarPos('G','image')
b = cv2.getTrackbarPos('B','image')
img[:] = [b,g,r]
如果没有这个命令,我只有一个黑色的图像。
您可能希望将CV_8UC3
图像img
的所有像素设置为b
、g
和r
给定的颜色;
你可以在OpenCV中这样做:
img.setTo(Vec3b(b, g, r));
或等效地:
img.setTo(Scalar(b, g, r));
在你的代码中,你基本上错过了所有重要的部分:
- 无限循环(因此您可以在不刷新图像颜色的情况下退出程序)
- 新颜色的分配
- 您正在混合过时的C语法和C++语法
这就是您所需要的:
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// Initialize a black image
Mat3b imgScribble(256, 512, Vec3b(0,0,0));
namedWindow("Image", WINDOW_AUTOSIZE);
createTrackbar("R", "Image", 0, 255);
createTrackbar("G", "Image", 0, 255);
createTrackbar("B", "Image", 0, 255);
while (true)
{
int r = getTrackbarPos("R", "Image");
int g = getTrackbarPos("G", "Image");
int b = getTrackbarPos("B", "Image");
// Fill image with new color
imgScribble.setTo(Vec3b(b, g, r));
imshow("Image", imgScribble);
if (waitKey(1) == 27 /*ESC*/) break;
}
return 0;
}
我认为,您正在寻找std::for_each()。此代码未经测试。它旨在展示概念,它可能包含错误:
// color type - use whatever you have
using color = std::array<char, 3>;
// prepare image, wherever you get that from
auto img = std::vector<color>{width * height, color{{0x00, 0x00, 0x00}}};
// define the color we want to have: white
char r = 0xff;
char g = 0xff;
char b = 0xff;
std::for_each(std::begin(img), std::end(img),
[&](color& i){
i = {r, g, b};
});
通过选择不同于std::begin()
和std::end()
的迭代器,您当然可以选择向量的任何切片。
是的,C++中的习语与Python中的习语不同。
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 如何在C++中使用pybind11加载一个pickle python列表
- 如何在c++中使用system()来运行包含空格的python脚本
- python集合的C++等价物是什么.计数器
- 如果C++对象的类在另一个boost模块中声明,如何使用boost将指向该对象的指针返回到python
- 从python调用openMP共享库时,未定义opnMP函数
- 使用JsonCpp将数据返回到带有pybind11的python会在python调用中产生Symbol not foun
- 如何将真正的字符串从python c-api转换为python脚本
- Python ctype 'c_char_p' Memory Leak