我想从图像中创建一个具有特定坐标宽度和高度的矩形。
然后拆分通道,最后对该区域中的给定通道进行阈值处理。
我的问题是我想引用图像上的一个区域(矩形)。
这是我的代码: cv::Rect myROI(10, 20, 50, 50);
cv::Mat croppedImage = org_image(myROI);
在我对这个croppedImage 进行操作之后,我还想要该操作对org_image 的影响。
我想引用该区域而不是复制该区域(引用它)。
我怎样才能做到这一点?
编辑1:
首先感谢您的回答。当我使用
cv::threshold(croppedImage, croppedImage, thresh, 255, type);
矩形区域被阈值化(但所有通道),但不是我想要的特定通道,例如我只想对蓝色通道进行阈值化,我尝试了所有方法,它不起作用。
我尝试分割矩形,但它不起作用。
顺便说一句,合并分割图像的解决方案也是吗?这可以帮助我如果我可以通过仅引用croppedImage 进行拆分,我认为它会解决我的问题。
所以我只需要在一个投资回报率中设置一个通道,请给我一个完整的解决方案。而且我必须使用拆分。
谢谢
编辑 2
所以它不起作用,请在此处查看我的代码...对分割通道的操作对裁剪图像和原始图像也没有任何影响。
Mat org_image = image.clone();
cv::Rect myROI(0, 0, 5, 5);
cv::Mat croppedImage = org_image(myROI);
std::vector<cv::Mat> img_split(3);
split(croppedImage, img_split);
cv::threshold(img_split[1], img_split[1], thresh, 255, 0);
for(int i=0; i < 3; i++)
printf("img_split[%d].data[0] ==> adress: %p, ==> data: %d\n", i, &img_split[i].data[0], img_split[i].data[0]);
printf("+++++++++++++++++\n");
for(int i=0; i < 3; i++)
printf(" croppedImage[%d] ==> adress: %p, ==> data: %d\n", i, &croppedImage.data[i], croppedImage.data[i]);
printf("+++++++++++++++++\n");
for(int i=0; i < 3; i++)
printf("org_image[%d] ==> adress: %p, data -> %d\n", i, &org_image.data[i], org_image.data[i]);
输出:
img_split[0].data[0] ==> adress: 0x846e8a0, ==> data: 212
img_split[1].data[0] ==> adress: 0x846e8d0, ==> data: 255
img_split[2].data[0] ==> adress: 0x846e910, ==> data: 220
+++++++++++++++++
croppedImage[0] ==> adress: 0xb468d010, ==> data: 212
croppedImage[1] ==> adress: 0xb468d011, ==> data: 220
croppedImage[2] ==> adress: 0xb468d012, ==> data: 220
+++++++++++++++++
org_image[0] ==> adress: 0xb468d010, data -> 212
org_image[1] ==> adress: 0xb468d011, data -> 220
org_image[2] ==> adress: 0xb468d012, data -> 220
我没有更多的想法.... :-(