이미지의 특정 좌표 너비와 높이를 가진 사각형을 만들고 싶습니다.open cv, 직사각형 참조 영역 참조
그런 다음 채널을 분할하고 마지막으로이 영역에서 주어진 채널을 thresholding합니다.
내 문제는 이미지의 영역 (직사각형)을 참조하고 싶습니다.
이것은 내 코드입니다. cv :: Rect myROI (10, 20, 50, 50);
cv :: Mat croppedImage = org_image (myROI);
이 croppedImage를 조작 한 후에도 org_image에 영향을주었습니다.
지역을 참조하고 해당 지역을 복사하지 않으려합니다 (참조).
어떻게하면됩니까? 편집 한
:
는 우선 답변에 감사드립니다. 내가 사용하는 위의 내 코드에 작은 솔루션이 필요합니다
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]);
아웃풋 :이 croppedImage에서 작동 후
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
나는 더 이상 아이디어를 가지고 있겠지 ... :-(사실
하지 않는 한 당신이 명시 적으로'클론()의''이력서 :: Mat', 메모리가 공유됩니다. ROI에 대한 작업을 수행하면 원래 이미지에 영향을 주어야합니다. 당신의 코드가 이미 이것을하지 않는다고 말하는 것입니까? – Aurelius