이진 이미지에서 일부 픽셀의 RGB 값을 설정하려고합니다. 그러나 좌표가 (89, 89) 이상일 때마다 저에게 어설 션 오류를줍니다! (150, 150) 좌표에서 RGB 값에 액세스 중이므로 내 이미지 해상도가 괜찮습니다. 좌표가 (89, 89) 이하이면 잘 작동합니다. 내 코드 :openCV의 특정 이미지에서 픽셀의 RGB 값 설정
cv::Mat img_gray, img_bw;
//read an image
cv::Mat3b img_bgr = cv::imread("test.jpg");
cv::imshow("Original Image", img_bgr);
//conversion to binary from color
cv::cvtColor(img_bgr, img_gray,CV_RGB2GRAY);
cv::threshold(img_gray, img_bw, 75.0, 255.0, THRESH_BINARY);
//accessing BGR of position (150, 150) from a color image
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bgr(150,150)<<std::endl;
//Setting BGR of position (150, 150) in binary image
img_bw.at<Vec3b>(150, 150)[0] = 255;
img_bw.at<Vec3b>(150, 150)[1] = 255;
img_bw.at<Vec3b>(150, 150)[2] = 255;
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at<Vec3b>(150, 150)<<std::endl;
여기서 "Setting BGR"섹션에 150 대신 89를 입력하면 작동합니다. 그렇지 않으면, 전체 오류 :
OpenCV의 오류 : 어설 (실패 어두워 < = 2 & & 데이터 & & (부호) I0 < (부호) size.p [0] & & (부호) (I1 * 데이터 형식 < _Tp > :: 채널) < (부호) (size.p 1 * 채널()) & & ((((는 sizeof (size_t로) < < 28) | 0x8442211) >> ((데이터 형식 < _Tp> :: 깊이) & ((1 < < 3) - 1)) * 4) & 15) == elemSize1()) :: Mat :: at, 파일 e : \ opencv \ opencv \ build \ include \ opencv2 \ core \ mat.hpp 줄 538
이 모든 유형의 메모리 공간 오류가 있습니까? 미리 도움을 주셔서 감사합니다! :)
업데이트 :이 방법을 시도해 봤습니다! 그러나 출력은 이제 비어 있습니다.
cv::Mat img_gray, img_bw;
//read an image
cv::Mat3b img_bgr = cv::imread("test.jpg");
cv::imshow("Original Image", img_bgr);
//conversion to binary from color
cv::cvtColor(img_bgr, img_gray,CV_RGB2GRAY);
cv::threshold(img_gray, img_bw, 75.0, 255.0, THRESH_BINARY);
//accessing BGR of position (150, 150) from a color image
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bgr(150,150)<<std::endl;
//Setting BGR of position (150, 150) in binary image
img_bw.at<uchar>(150, 150) = 255;
std::cout<<"Pixel at position (x, y) : ("<<150<<", "<<150<<") ="<<img_bw.at<uchar>(150, 150)<<std::endl;
내 테스트 이미지는 여기
되고 출력은 여기에 내가의이 코멘트에 힌트를 비커에 이제 대답 덕분에이
귀하의 img_bw는 회색입니다. 따라서 img_bw.at을 입력하여 픽셀에 액세스 할 수 없습니다. 대신 img_bw.at을 사용해야합니다 (150,150) = 255 –
alex
@alex 이미 시도했습니다. 이 경우 내 std :: cout < (150,150)은 단순히 비어 있습니다! –
@TousifZaman 우리에게 보여주지 않는 코드는 수정할 수 없습니다. 'Vec3b'를 사용하는 것이 올바르지 않다는 것을 알고 있습니다. 오류 및 입력 이미지와 함께 'uchar'을 사용하여 코드를 표시하면 아마도 도움이 될 것입니다. – beaker