gpt4 book ai didi

c - 学习openCV : Use the pointer element to access cvptr2D to point to the middle 'green' channel. 在20,5和40,20之间绘制矩形

转载 作者:行者123 更新时间:2023-11-30 15:45:14 24 4
gpt4 key购买 nike

学习opencv的书里第3章有一道题:

Create a two dimensional matrix with three channels of type byte with data size 100-by-100 and initialize all the values to 0.

Use the pointer element to access cvptr2D to point to the middle 'green' channel.Draw the rectangle between 20,5 and 40,20.

我已经成功完成了第一部分,但我无法理解第二部分。这是我到目前为止所做的:

/*
Create a two dimensional matrix with three channels of type byte with data size 100- by-100 and initialize all the values to 0.
Use the pointer element to access cvptr2D to point to the middle 'green' channel.Draw `enter code here`the rectangle between 20,5 and 40,20.
*/
void ex10_question3(){
CvMat* m = cvCreateMat(100,100,CV_8UC3);
CvSetZero(m); // initialize to 0.
uchar* ptr = cvPtr2D(m,0,1); // if RGB, then start from first RGB pair, Green.
cvAdd(m,r);
cvRect r(20,5,20,15);
//cvptr2d returns a pointer to a particular row element.

}

我正在考虑添加矩形和矩阵,但显然这行不通,因为矩形只是坐标和宽度/高度。我不熟悉cvPtr2D()。我怎样才能想象出练习要我做什么,有人能给我正确方向的提示吗?解决方案必须是 C 语言。

根据我对交错 RGB channel 的理解,第二个 channel 将始终是感兴趣的 channel 。 (数组索引:1,4,6..)

最佳答案

这就是风吹来的方向...

首先,问题在于C API。由于遗留原因,该 API 仍然存在,但很快就会过时。如果您认真了解 OpenCV,请参阅 C++ API。官方教程是很好的信息来源。

为了进一步定位您的问题,这将是您的问题在 C++ 中的实现。

cv::Mat canvas = cv::Mat::zero(100,100, CV_8UC3); // create matrix of bytes, filled with 0
std::vector<cv::Mat> channels(3); // prepare storage for splitting
split(canvas, channels); // split matrix to single channels
rectangle(channels[1], ...); // draw rectangle [I don't remember exact params]
merge(channels, canvas); // merge the channels together

如果你只需要绘制绿色矩形,实际上要容易得多:

cv::Mat canvas = cv::Mat::zero(100,100, CV_8UC3); // create matrix of bytes, filled with 0
rectangle(canvas, ..., Scalar(0,255,0)); // draw green rectangle

编辑:

要了解如何使用 C++ API 访问图像中的单个像素,请参阅此答案: https://stackoverflow.com/a/8139210/892914

关于c - 学习openCV : Use the pointer element to access cvptr2D to point to the middle 'green' channel. 在20,5和40,20之间绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19175990/

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