簡體   English   中英

等價於c ++中的python的[:]

[英]the equivalent of python's [:] in c++

這是opencv隨附的python程序“ Trackbar as the Palette”的一部分。 我想在C ++中使用它。

我的問題是最后一行。

r = cv2.getTrackbarPos('R','image')
g = cv2.getTrackbarPos('G','image')
b = cv2.getTrackbarPos('B','image')
img[:] = [b,g,r]

沒有此命令,我將只有黑色圖像。

您可能希望將CV_8UC3圖像img所有像素設置為bgr給出的顏色;

您可以在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中的習慣用法不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM