我想從圖像創建一個具有特定座標寬度和高度的矩形。打開簡歷,矩形感興趣的區域
然後分割通道,最後對給定通道進行閾值分割。
我的問題是我想引用圖像上的區域(矩形)。
這是我的代碼: CV ::矩形myROI(10,20,50,50);
cv :: Mat croppedImage = org_image(myROI);
後,我對這個croppedImage我還想工作,也就是說在org_image的操作效果。
我想referece該地區,並不能複製的區域(引用它)。
我該怎麼做?
編輯1:
感謝您的回答首先的。當我使用
cv :: threshold(croppedImage,croppedImage,thresh,255,type)時,我需要一個額外的小解決方案。
的矩形區域被閾值(但所有通道),但不是我想要的特定頻道,例如我想只有藍色通道被閾值,我嘗試了一切,它不工作。
我試過分割矩形,但它不起作用。
順便說一下,解決方案也合併拆分圖像嗎?這可以幫助我 如果我可以通過只引用裁剪圖像拆分它會解決我的問題,我想。
所以我只需要門檻的投資回報率一個通道,請給我一個完整的解決方案。我必須使用分裂。
謝謝
編輯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
我沒有任何更多的想法.... :-(
除非你明確地'克隆()''一個CV :: Mat',內存是共享的。對您的ROI執行操作應該會影響原始圖像。你是說你的代碼已經不這樣做了嗎? – Aurelius 2013-03-12 21:03:28