C++ can';t更改图像Mat opencv中的所有像素
我有一个灰色的图像,我想把图像中的所有像素值都变成白色 我尝试以下代码:C++ can';t更改图像Mat opencv中的所有像素,c++,image,opencv,image-processing,C++,Image,Opencv,Image Processing,我有一个灰色的图像,我想把图像中的所有像素值都变成白色 我尝试以下代码: int main(int argc,字符**argv){ cv::Mat img=cv::imread(“C:/mata.jpg”); 对于(int i=0;i
int main(int argc,字符**argv){
cv::Mat img=cv::imread(“C:/mata.jpg”);
对于(int i=0;i
图像大小:37 x 29
我已经检查了该循环中的像素总数,结果是,我可以访问所有像素,但不是图像中的所有像素都变为白色(只有四分之一的图像变为白色,其他图像的颜色仍然与原始图像相同)
有人能帮我吗?您的图像可能是一个RGB图像,显示为灰度。这意味着每个通道共享相同的值,或者红色、绿色和蓝色值都相等。尝试以灰度形式读取图像,或执行从颜色到灰度的手动转换 这样做:
int main(int argc, char** argv) {
cv::Mat img = cv::imread("C:/mata.jpg", cv::IMREAD_GRAYSCALE); // Change here
for (int i = 0; i < img.rows; i++)
for (int j = 0; j < img.cols; j++)
img.at<uchar>(i, j) = 255;
imshow("result", img);
}
int main(int argc,char**argv){
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread_GRAYSCALE);//在此处更改
对于(int i=0;i
。。。或者这样做:
int main(int argc, char** argv) {
cv::Mat img_colour = cv::imread("C:/mata.jpg"); // Change here
cv::Mat img;
cv::cvtColor(img_colour, img, cv::CV_BGR2GRAY); // Change
for (int i = 0; i < img.rows; i++)
for (int j = 0; j < img.cols; j++)
img.at<uchar>(i, j) = 255;
imshow("result", img);
}
intmain(intargc,char**argv){
cv::Mat img_color=cv::imread(“C:/mata.jpg”);//在此处更改
cv::Mat img;
cv::cvt颜色(img_颜色、img、cv::cv_bgr2灰色);//更改
对于(int i=0;i
您的图像可能是RGB图像,可视为灰度。这意味着每个通道共享相同的值,或者红色、绿色和蓝色值都相等。尝试以灰度形式读取图像,或执行从颜色到灰度的手动转换
这样做:
int main(int argc, char** argv) {
cv::Mat img = cv::imread("C:/mata.jpg", cv::IMREAD_GRAYSCALE); // Change here
for (int i = 0; i < img.rows; i++)
for (int j = 0; j < img.cols; j++)
img.at<uchar>(i, j) = 255;
imshow("result", img);
}
int main(int argc,char**argv){
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread_GRAYSCALE);//在此处更改
对于(int i=0;i
。。。或者这样做:
int main(int argc, char** argv) {
cv::Mat img_colour = cv::imread("C:/mata.jpg"); // Change here
cv::Mat img;
cv::cvtColor(img_colour, img, cv::CV_BGR2GRAY); // Change
for (int i = 0; i < img.rows; i++)
for (int j = 0; j < img.cols; j++)
img.at<uchar>(i, j) = 255;
imshow("result", img);
}
intmain(intargc,char**argv){
cv::Mat img_color=cv::imread(“C:/mata.jpg”);//在此处更改
cv::Mat img;
cv::cvt颜色(img_颜色、img、cv::cv_bgr2灰色);//更改
对于(int i=0;i
正如其他答案和评论中所建议的,您将图像读取为BGR而不是灰度。另一种既适用于灰度图像又适用于彩色图像的方法是完全避免手动循环,而是编写以下内容:
img.setTo(cv::Scalar::all(255));
或
查看更多变体。正如其他答案和评论中所建议的,您将图像读取为BGR而不是灰度。
另一种既适用于灰度图像又适用于彩色图像的方法是完全避免手动循环,而是编写以下内容:
img.setTo(cv::Scalar::all(255));
或
查看更多变体。您的图像不是灰度图像。它正在加载为3通道图像。试试这个:
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread\u灰度)你确定你的图像是灰度的吗?。。。或者它是一个所有成分都相等的RGB图像?我尝试了imread(“图像”,CV_BGR2GRAY),但结果相同@它是有效的!!!谢谢……)@正确的语法是imread(“image”,0)
您使用的标志用于转换图像。您的图像不是灰度图像。它正在加载为3通道图像。试试这个:cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread\u灰度)你确定你的图像是灰度的吗?。。。或者它是一个所有成分都相等的RGB图像?我尝试了imread(“图像”,CV_BGR2GRAY),但结果相同@它是有效的!!!谢谢……)@正确的语法是imread(“image”,0)
您使用的标志用于转换图像。非常好的优化+1.优化很好+1.